NestJS全局异常过滤器深度实践:两种实现方式与企业级应用指南
在构建企业级Node.js应用时,优雅地处理异常是保证系统健壮性的关键。NestJS作为渐进式Node.js框架,提供了强大的异常过滤机制,本文将深入探讨全局异常过滤器的两种实现方式及其最佳实践。
1. NestJS异常处理机制解析
NestJS内置的异常层会自动捕获未处理的异常,并转换为友好的HTTP响应。当控制器抛出HttpException或其子类时,框架会生成如下标准响应:
{
"statusCode": 403,
"message": "Forbidden"
}
但实际企业应用中,我们往往需要更丰富的错误信息,比如:
- 错误发生时间戳
- 请求路径
- 错误堆栈(开发环境)
- 业务错误代码
- 多语言支持
这就是全局异常过滤器的用武之地。通过自定义过滤器,我们可以统一处理各种异常,提供一致的错误响应格式。
2. 基础实现:main.ts直接注册
最简单的全局异常过滤器注册方式是在应用启动文件(main.ts)中直接实例化:
// main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { HttpFilter } from './common/filters/http.filter';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalFilters(new HttpFilter());
await app.listen(3000);
}
bootstrap();
对应的基础过滤器实现:
// common/filters/http.filter.ts
import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';
import { Request, Response } from 'express';
@Catch(HttpException)
export class HttpFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getReque


985

被折叠的 条评论
为什么被折叠?



