在NestJS中,ExceptionFilter
和 BaseExceptionFilter
是用于全局异常处理的过滤器。它们允许你在应用程序中捕获并处理异常,从而向客户端返回一致的错误响应。
ExceptionFilter
接口的一个抽象实现,提供了一些默认的异常处理方法。你可以继承BaseExceptionFilter
来创建自定义的异常过滤器,并重写其中的方法以实现特定的逻辑。BaseExceptionFilter
并重写相关方法,你可以实现自定义的异常处理逻辑。main.ts
文件中使用app.useGlobalFilters()
方法来实现。问题:为什么我在NestJS中定义了全局异常过滤器,但某些异常仍然没有被捕获?
原因:
解决方法:
Promise
中或使用async/await
语法。以下是一个简单的自定义异常过滤器的示例:
import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';
@Catch(HttpException)
export class CustomExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse();
const status = exception.getStatus();
response.status(status).json({
statusCode: status,
message: exception.message,
});
}
}
要在NestJS应用程序中使用此自定义异常过滤器,请在main.ts
文件中添加以下代码:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { CustomExceptionFilter } from './custom-exception.filter';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalFilters(new CustomExceptionFilter());
await app.listen(3000);
}
bootstrap();
通过以上配置,所有未捕获的HttpException
异常都将由CustomExceptionFilter
处理,并返回统一的错误响应。
更多关于NestJS异常处理的信息,请参考官方文档:https://docs.nestjs.com/exception-filters。
领取专属 10元无门槛券
手把手带您无忧上云