NestJS 拦截器(Interceptor)使用场景
说明:本文档路径位于 拦截器 目录,内容为 拦截器;若旧稿误写「异常过滤器」,请以本节为准。
拦截器做什么
拦截器基于 RxJS,包裹路由处理流水线,可在请求前后插入逻辑,并能 改写返回值或异常流。
典型使用场景
| 场景 | 做法 |
|---|---|
| 统一响应体 | map 将业务结果包一层 { code, data, message } |
| 日志与耗时 | tap 记录入参、URL、Date.now() 差值 |
| 超时控制 | timeout 运算符限制 Observable 时长 |
| 缓存只读接口 | 与 Redis 结合,命中则短路返回 |
| 权限前置校验 | 轻量校验可放 Guard;与响应格式无关的横切逻辑也可放拦截器 |
与过滤器、中间件的区别(简述)
- 中间件:Express 层,最早执行,拿不到具体路由上下文中的参数装饰器解析结果。
- 守卫 Guard:决定「能不能进路由」,侧重认证 / 授权。
- 拦截器:包裹 控制器方法返回值,最适合统一包装、日志、映射。
- 异常过滤器 Exception Filter:处理 抛出的异常 与 HTTP 状态码映射。
注册方式
- 全局:
APP_INTERCEPTOR提供者。 - 控制器 / 方法:
@UseInterceptors()。
