拦截器(Interceptors)是一个使用 @Injectable() 装饰的类,它必须实现 NestInterceptor 接口。

前面讲了基于Nest生成Web API项目,如果不清楚请移步:【Nest教程】基于Nest初始化Web API项目,文章只讲解了使用脚手架搭建简单的项目并且可以正常运行。

今天我们讲下自定义拦截器,Nest拦截器功能很强大,可以在函数执行之前/之后绑定额外的逻辑、转换从函数返回的结果、转换从函数抛出的异常、扩展基本函数行为等。我们在之前的项目基础上增加自定义拦截器,转换从函数返回的结果。


1 创建自定义拦截器

我们在我们项目目录src下新建interceptor文件夹,文件夹下新建transform.interceptor.ts文件,文件内容如下:

import {    Injectable,    NestInterceptor,    CallHandler,    ExecutionContext,  } from '@nestjs/common';  import { map } from 'rxjs/operators';  import { Observable } from 'rxjs';  interface Response<T> {    data: T;  }  @Injectable()  export class TransformInterceptor<T>    implements NestInterceptor<T, Response<T>> {    intercept(      context: ExecutionContext,      next: CallHandler<T>,    ): Observable<Response<T>> {      return next.handle().pipe(        map(data => {          return {            data,            code: 0,            message: '请求成功',          };        }),      );    }  }

注意:用到了rxjs模块,需要先安装

yarn add rxjs
  • 每个拦截器都有intercept(ExecutionContext, CallHandler)方法,第一个参数是执行上下文,第二个参数是调用处理程序

  • CallHandler是一个包装执行流的对象。因此。必须手动调用hander()方法,最终方法才会被触发

  • handle()返回一个Observable,这里我们拦截响应数据,给相应数据外面套一层对象。

2 项目绑定自定义拦截器

绑定拦截器也是比较简单,我们在项目src目录下,main.ts文件导入我们新建的文件,绑定即可

import { NestFactory } from '@nestjs/core';import { AppModule } from './app.module';import { TransformInterceptor } from './interceptor/transform.interceptor';async function bootstrap() {  const app = await NestFactory.create(AppModule);  app.useGlobalInterceptors(new TransformInterceptor());  await app.listen(3000);}bootstrap();


3 启动项目查看效果

启动项目

yarn start

用postman get请求方式请求

我们可以看到,最外层是我们自定义的,data里是响应数据。文章里没有过多的讲解理论知识,因为我也是刚开始学习Nest,只能是需要什么就查什么,记录什么。如果你也是对这个比较感兴趣,我们可以共同交流学习。

©著作权归作者所有:来自51CTO博客作者mb5fd86dae5fbf6的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 【Nest教程】为项目增加个自定义过滤器
  2. 【Nest教程】Nest项目配置邮件服务器,实现发送邮件
  3. 【Nest教程】Nest项目增加定时任务
  4. Linq中带有迭代索引的Select扩展方法,为啥知道的人不多呢?
  5. 当模板方法遇到了委托函数,你的代码又可以精简了
  6. github代码管理
  7. VS Nuget的使用以及VS Code与git介绍
  8. flex元素常用属性
  9. awk函数-摘自Linux Shell核心编程指南

随机推荐

  1. Android 学习资料分享(2015 版)
  2. android 圆弧刻度进度条
  3. Android(安卓)SDCard UnMounted 流程分析
  4. Android 任务管理器分析小结
  5. 大仙说道之Android studio实现Service AI
  6. [置顶] 一步一步学android OpenGL ES2.0
  7. Android GestureDetector手势识别与多点
  8. 1.Android新版开发教程&笔记—Android AD
  9. Android高手进阶教程(八)之----Android W
  10. Android adb的使用略解