拦截器
原创2026/3/5大约 1 分钟
拦截器是用 @Injectable() 装饰器注释并实现 NestInterceptor 接口的类。

拦截器具有一组有用的功能,这些功能的灵感来自 面向方面编程 (AOP) 技术。 它们可以:
- 在方法执行之前/之后绑定额外的逻辑
- 转换函数返回的结果
- 转换函数抛出的异常
- 扩展基本功能行为
- 根据特定条件完全覆盖函数(例如,出于缓存目的)
现在我们生成一个拦截器
nest g itc ./interceptor/response在src/interceptor目录下,我们生成了一个响应拦截器
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'
import { Observable } from 'rxjs'
@Injectable()
export class ResponseInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
return next.handle()
}
}简单修改
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'
import { Observable } from 'rxjs'
import { map } from 'rxjs/operators'
@Injectable()
export class ResponseInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
return next.handle().pipe(
map((response) => {
return response + 1
}),
)
}
}使用
import { Controller, Get, UseInterceptors } from '@nestjs/common'
import { UserService } from './user.service'
import { ResponseInterceptor } from 'src/interceptor/response/response.interceptor'
@UseInterceptors(ResponseInterceptor)
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get('')
findAll() {
return '哈哈哈哈哈哈'
}
}也可以直接在路由上使用
import { Controller, Get, UseInterceptors } from '@nestjs/common'
import { UserService } from './user.service'
import { ResponseInterceptor } from 'src/interceptor/response/response.interceptor'
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@UseInterceptors(ResponseInterceptor)
@Get('')
findAll() {
return '哈哈哈哈哈哈'
}
}此时,我们访问http://localhost:3000/user进行查看,看到了哈哈哈哈哈哈1,很明显拦截器将我们的响应数据进行了拦截处理
至此,本章节的学习就到此结束了,如有疑惑,可对接技术客服进行相关咨询。