全书目录

第七篇:NestJS 完全指南 —— 国际机场总调度宇宙

第十一章:Interceptor —— 它像中转总线,负责统一包装和流程编排

1 分钟 192 字 第 191 / 962 个阅读单元

Interceptor 是 NestJS 最像“机场中转调度带”的能力之一。

官方文档总结得很准:它可以做

  • 前后置逻辑
  • 返回值转换
  • 异常转换
  • 缓存
  • 覆写处理流程

一个经典例子:统一返回格式。

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

@Injectable()
export class ResponseInterceptor<T>
  implements NestInterceptor<T, { data: T }>
{
  intercept(
    _context: ExecutionContext,
    next: CallHandler,
  ): Observable<{ data: T }> {
    return next.handle().pipe(map(data => ({ data })));
  }
}

全局注册:

ts
app.useGlobalInterceptors(new ResponseInterceptor());

结果从:

json
{
  "id": "f1",
  "code": "MU2451"
}

变成:

json
{
  "data": {
    "id": "f1",
    "code": "MU2451"
  }
}

类比:

text
请求进站
  ↓
Guard 安检
  ↓
Pipe 预处理
  ↓
Controller / Service
  ↓
Interceptor 对结果统一包装
  ↓
返回

Interceptor 很适合做:

  • 响应包裹
  • 耗时统计
  • 缓存命中
  • 审计日志
  • 敏感字段裁剪

它不适合做:

  • 认证主逻辑
  • 核心领域规则
  • 杂糅一切的“万能中间层”