Skip to content

NestJS 拦截器(Interceptor)使用场景

说明:本文档路径位于 拦截器 目录,内容为 拦截器;若旧稿误写「异常过滤器」,请以本节为准。

拦截器做什么

拦截器基于 RxJS,包裹路由处理流水线,可在请求前后插入逻辑,并能 改写返回值或异常流

典型使用场景

场景做法
统一响应体map 将业务结果包一层 { code, data, message }
日志与耗时tap 记录入参、URL、Date.now() 差值
超时控制timeout 运算符限制 Observable 时长
缓存只读接口与 Redis 结合,命中则短路返回
权限前置校验轻量校验可放 Guard;与响应格式无关的横切逻辑也可放拦截器

与过滤器、中间件的区别(简述)

  • 中间件:Express 层,最早执行,拿不到具体路由上下文中的参数装饰器解析结果。
  • 守卫 Guard:决定「能不能进路由」,侧重认证 / 授权。
  • 拦截器:包裹 控制器方法返回值,最适合统一包装、日志、映射。
  • 异常过滤器 Exception Filter:处理 抛出的异常 与 HTTP 状态码映射。

注册方式

  • 全局:APP_INTERCEPTOR 提供者。
  • 控制器 / 方法:@UseInterceptors()