响应拦截器
定义拦截器
文件放在 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())