响应拦截器

定义拦截器

文件放在 src/commone/response.ts

import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'
import { Observable } from 'rxjs'

interface Data<T> {
  data: T
}

@Injectable()
export class Response<T> implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler<any>): Observable<Data<T>> | Promise<Observable<any>> {
    // 前置处理可以在这里写(比如打印日志)
    return next.handle().pipe(
      // 这里才是“后置处理”,对响应数据进行统一包装
      map(data => {
        return {
          data,
        }
      }),
    )
  }
}

控制器/方法拦截器 @@8 @@15

import { Controller, Get, UseInterceptors } from '@nestjs/common'
import { AdminService } from 'src/admin/admin.service'
import { GreatMiddleware } from 'src/miidleware/great/great.middleware'

@Controller('index')
@UseInterceptors(GreatMiddleware) // 控制器拦截器
export class IndexController {
  //
  constructor(private readonly admin: AdminService) {}
  //
  @Get('user')
  @UseInterceptors(GreatMiddleware) // 方法拦截器
  getList(): string {
    return this.admin.getAdmin()
  }
}

全局拦截器 @@7 @@15

main.ts中使用

import { Response } from './common/response'
app.useGlobalInterceptors(new Response())