异常拦截器是一个实现了ExceptionFilter接口的类,该类有一个接收两个参数的catch方法,可以通过该拦截器在请求接口失败时返回一些错误信息。本节我们演示的同样是全局异常拦截器
- 在common文件夹下新建一个filter.ts文件
import { ArgumentsHost, Catch, ExceptionFilter, HttpException } from '@nestjs/common'; import { Request, Response } from 'express'; // 和全局拦截器不一样,这里我们使用@Catch装饰器并且传入HttpException类 @Catch(HttpException) export class HttpFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { // 获取http错误信息 const ctx = host.switchToHttp(); // 获取请求信息 const request = ctx.getRequest<Request>(); // 获取响应信息 const response = ctx.getResponse<Response>(); // 获取请求返回状态信息 const status = exception.getStatus(); // 返回一些内容 response.status(status).json({ success: false, time: new Date(), data: exception.message, status, path:request.url }); } }
- 在main.ts里注册
import { HttpFilter } from './common/filter'; app.useGlobalFilters(new HttpFilter());