什么是错误拦截器?
在应用程序开发中,难免会遇到各种错误和异常。为了更好地处理这些情况,NestJS 提供了错误拦截器。错误拦截器允许我们在应用程序的不同层次上捕获、处理和转换异常,从而提高应用程序的可维护性和稳定性。
@Injectable和@Catch的区别
在上一篇文章中,我们自定义了一个响应拦截器,使用了@Injectable
装饰器,主要作用是表示一个类是一个可注入的服务,而@Catch
用于创建自定义异常过滤器,用于捕获和处理特定类型的异常.
自定义异常过滤器
import {
Catch,
ExceptionFilter,
HttpException,
ArgumentsHost,
} from '@nestjs/common';
import { Response, Request } from 'express';
@Catch()
export class HttpFilter 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,
msg: exception.message,
timestamp: new Date().toISOString(),
path: request.url,
});
}
}
在上面代码中,创建了一个 HttpFilter 类,它捕获 HttpException 类型的异常。在 catch 方法中,我们可以访问请求、响应等信息,并根据异常类型执行相应的处理逻辑。
注册错误拦截器
import { HttpFilter } from './common/exception.filter';
app.useGlobalFilters(new HttpFilter());
在main.ts
中全局注册,或在controller
中单独使用