用途:该技能面向 NestJS 应用,指导使用拦截器(Interceptors)在方法执行前后绑定额外逻辑,例如日志记录请求/响应与执行耗时、转换响应数据、转换异常、缓存响应、添加超时、绑定方法前后的附加逻辑、去除响应中的 null 值、包装统一响应格式,以及实现面向切面编程(AOP)模式。
主要能力:拦截器是带 @Injectable() 的类,实现 NestInterceptor 接口,可用 RxJS 操作流。可转换函数返回结果、转换抛出的异常、扩展基础行为,也可按条件完全覆盖函数行为。拦截器在守卫之后、管道与路由处理器前后执行。可通过 next.handle() 返回 Observable,并用 map、tap、catchError、timeout、retry、switchMap 等运算符处理。
使用方式:实现 intercept(context: ExecutionContext, next: CallHandler) 方法;context 可获取请求、响应、处理器与控制器。绑定范围包括方法级 @UseInterceptors(LoggingInterceptor)、控制器级,以及全局:在模块 providers 中用 APP_INTERCEPTOR,或在 main.ts 用 app.useGlobalInterceptors(new LoggingInterceptor())。若未调用 next.handle(),路由处理器不会执行。
适用场景与限制:适合日志、响应转换、异常映射、缓存、超时、自定义响应头、文件流处理、指标统计等横切关注点。应保持单一职责、使用合适 RxJS 运算符、正确处理错误、注意应用顺序、避免重计算、始终返回 next.handle() 结果、审慎使用全局拦截器。资料未提供收费、价格与平台信息。