惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园_首页
量子位
阮一峰的网络日志
阮一峰的网络日志
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hackread – Cybersecurity News, Data Breaches, AI and More
云风的 BLOG
云风的 BLOG
D
DataBreaches.Net
B
Blog
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿
Microsoft Azure Blog
Microsoft Azure Blog
IT之家
IT之家
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
H
Help Net Security
The Cloudflare Blog
U
Unit 42

木灵鱼儿

18 NestJS 基于 Docker 的 NestJS + Prisma + Playwright 生产环境容器化实践 - 木灵鱼儿 17 NestJS 使用 CoreModule 实现基础设施与业务域的彻底解耦 - 木灵鱼儿 VS Code BYOK 配置生成器 - 木灵鱼儿 2026 最新禁止浏览器密码管理器弹出教程 - 木灵鱼儿 16 NestJS 企业级 RBAC 权限控制体系 - 木灵鱼儿 15 NestJS 统一响应体设计(信封模式) - 木灵鱼儿 13 NestJS 集成 TypeORM 完全指南 - 木灵鱼儿 12 NestJS 集成 Prisma ORM 完全指南(Prisma v7) - 木灵鱼儿 11 NestJS 注册与登录接口的密码安全设计 - 木灵鱼儿 10 NestJS JWT 身份验证完全指南 - 木灵鱼儿 09 NestJS 使用 @nestjs-swagger 生成 API 文档 - 木灵鱼儿 08 NestJS DTO 校验、Entity 脱敏与 Mapped Types 实战(TypeORM & Prisma) - 木灵鱼儿 07 NestJS 使用Caching缓存(cache-manager) - 木灵鱼儿 06 NestJS 使用Redis - 木灵鱼儿 05 Nestjs 高性能构建之SWC与Typescript7选型 - 木灵鱼儿 04 Nestjs API版本控制策略 - 木灵鱼儿 NestJS 正确处理日志 - 木灵鱼儿 NestJS config模块扩展用法.md - 木灵鱼儿 宝塔如何给网站一次性绑定两个域名 - 木灵鱼儿 NestJS 环境变量与配置管理(Config 模块) - 木灵鱼儿 如何使用 FNM 自动切换不同项目的 Node.js 版本 - 木灵鱼儿 如何使用 Node.js Corepack 自动锁定和切换项目包管理器版本 - 木灵鱼儿 日常开发中的 void:从忽略 Promise 到理解 JavaScript 历史写法 - 木灵鱼儿 git 进阶指南:如何用 Git Worktree 完美应对紧急 Bug 与多分支联调 - 木灵鱼儿 了解并解决 Git 大小写“无感”的幽灵 Bug - 木灵鱼儿 从零开始:手把手教你封装一个企业级 Axios 请求模块 - 木灵鱼儿 03-Vue Query 高级进阶:应对复杂业务场景的硬核套路 - 木灵鱼儿 02-Vue Query 快速入门:从零构建你的第一个声明式查询 - 木灵鱼儿 Windows 下如何快速复制目录的同时排除指定的目录和文件 - 木灵鱼儿 x86多网口软路由+pve+爱快ikuai+iStoreOS实现组网和翻墙 - 木灵鱼儿
14 NestJS 生产级错误过滤方案 - 木灵鱼儿
木灵鱼儿 · 2026-08-16 · via 木灵鱼儿

前言:为什么需要生产级错误过滤

默认响应的局限

NestJS 内置的异常处理机制已经相当完善,但在生产项目中仍然存在明显不足:

格式不统一:不同层抛出的异常,响应结构各不相同。HttpException 返回 { statusCode, message },未捕获的 Error 返回 500 的通用格式,Prisma 错误则直接泄露为 500 且没有任何业务上下文。

泄露内部细节:默认情况下,数据库错误、堆栈信息、内部路径等敏感内容可能出现在生产环境的响应体中。

可观测性差:没有统一的日志格式,无法关联请求链路,难以在监控系统中定位问题根源。

生产环境的核心诉求

诉求说明
统一格式前端对接时只需处理一种响应结构
安全隐藏内部细节生产环境不暴露数据库错误码、堆栈、文件路径
可观测性每条错误日志可追溯到具体请求
可维护性错误码集中管理,便于国际化和前端对接

本文方案概览

本文构建两层过滤器链路:

请求进入
   ↓
业务逻辑 / ORM 操作
   ↓ 抛出异常
PrismaExceptionFilter     ← 优先处理 Prisma 错误,非 Prisma 错误继续上抛
   ↓ 非 Prisma 错误
AllExceptionsFilter        ← 兜底处理所有其余异常(HttpException、业务异常、未知 Error)
   ↓
统一格式的 JSON 响应

涉及的文件结构:

src/
├── common/
│   ├── filters/
│   │   ├── all-exceptions.filter.ts        # 兜底过滤器
│   │   └── prisma-exception.filter.ts      # Prisma 专用过滤器
│   ├── exceptions/
│   │   ├── business.exception.ts           # 自定义业务异常基类
│   │   └── error-codes.ts                  # 统一错误码枚举
│   └── interfaces/
│       └── error-response.interface.ts     # 统一响应结构接口
└── database/
    └── utils/
        └── prisma-error.util.ts            # Prisma 错误判断工具函数

此处内容已隐藏回复后方可阅读。

版权申明

本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。