NestJS 提供了强大的异常处理机制。可以通过 @Catch()
装饰器创建自定义异常过滤器来捕获和处理异常。例如:
typescript复制代码
typescript
import { ExceptionFilter, Catch, ArgumentsHost, HttpException, HttpStatus } from '@nestjs/common';
import { Request, Response } from 'express';
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest<Request>();
const status = exception.getStatus();
response.status(status).json({
statusCode: status,
timestamp: new Date().toISOString(),
path: request.url,
message: exception.message,
});
}
}
在模块中全局注册异常过滤器:
typescript复制代码
python
import { Module, APP_FILTER } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { HttpExceptionFilter } from './http-exception.filter';
@Module({
providers: [
{
provide: APP_FILTER,
useClass: HttpExceptionFilter,
},
],
})
export class AppModule {}
这样,所有未捕获的 HttpException
都会被 HttpExceptionFilter
处理,返回统一的错误响应格式。