我这里定义的响应拦截器和异常拦截器都是全局拦截器
common下面新建filter.ts
让我们创建一个异常过滤器,它负责捕获作为HttpException类实例的异常,并为它们设置自定义响应逻辑。为此,我们需要访问底层平台Request和Response。我们将访问Request对象,以便提取原始url并将其包含在日志信息中。我们将使用 Response.json()方法,使用 Response对象直接控制发送的响应。
import { ArgumentsHost, Catch, ExceptionFilter, HttpException } from "@nestjs/common";
import { Request, Response } from "express";
@Catch(HttpException)
export default class HttpFilter implements ExceptionFilter{
catch(exception: HttpException, host: ArgumentsHost) {
const ctx=host.switchToHttp();
const req=ctx.getRequest<Request>();
const res=ctx.getResponse<Response>();
const status=exception.getStatus();
res.status(status).json({
data:exception.message,
time:new Date(),
success:false,
path:req.url,
status
})
}
}
在main.ts注册
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { VersioningType } from '@nestjs/common';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';
import Response from './common/response'
import HttpFilter from './common/filter';
async function bootstrap() {
const app = await NestFactory.create<NestExpressApplication>(AppModule);
app.enableVersioning({
type: VersioningType.URI
})
app.useGlobalInterceptors(new Response())
app.useGlobalFilters(new HttpFilter())
await app.listen(3000);
}
bootstrap();
访问地址http://localhost:3000/date,接口异常