响应拦截器是一个实现了NestInterceptor接口的泛型类,该泛型类有一个接收两个参数的intercept方法。通过响应拦截器可以在返回之前做点事情,本节我们演示的是全局响应拦截器(如需针对特定服务拦截可以看中间件那个章节)
- 在src目录下新建一个common文件夹,新建response.ts文件
import { Injectable, NestInterceptor, CallHandler } from '@nestjs/common'; import { Observable, map } from 'rxjs'; // Data<T>接口声明map返回的类型(整个) interface Data<T> { data: T; } // 别忘了加上Injectable装饰器 @Injectable() export class Response<T> implements NestInterceptor { // 该方法接收两个参数,返回类型是Observable intercept(context, next: CallHandler): Observable<Data<T>> { // 通过管道处理响应流,返回格式是固定的,data即为controller中对应服务返回的内容 return next.handle().pipe( map((data) => { return { data, status: '200', message: '马牛逼', success: true, }; }), ); } }
- 在main.ts里注册
import { Response } from './common/response'; app.useGlobalInterceptors(new Response());