NestJS核心成员组成-中间件

关于MiddleWare

从本质来说,我们使用NestJS的时候,有百分之九十的原因是我们只想要一个能提供API的服务,即便是一个简单的由数据库+https请求的后台,也能满足百分之九十的人了。

对于有Express以及Koa开发的朋友来说,中间件的概念无需多讲,因为NodeJS对http请求的处理就是一个洋葱图,所以我们中间件就可以实现对很多请求的拦截以及处理,这也是中间件能成为核心概念的一大原因。

创建MiddleWare

在NestJS中,使用中间件不需要安装额外的包,当我们使用了nest/cli创建一个NestJS项目之后,只需要在控制台输入如下指令,脚手架会自动帮你创建一个基本的中间件。

nest g middleware middlewares/logger 上述指令,意思是在middlewares文件夹中,创建一个名字为logger的中间件,顾名思义,这个中间件是用来打印一些东西的。 在文件内的地址如下,同时也创建了test的文件,但是这个无关紧要。

生成的代码如下:

javascript 复制代码
import { Injectable, NestMiddleware } from '@nestjs/common';
​
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    next();
  }
}

其中,第五行开始的方法就是我们要编写的地方,而传入的三个参数中,req表示请求体,res表示返回体,next则需要在最后的时候调用,这样子程序才不会在这儿卡住。

接下来,在代码中简单的打印出一句话

javascript 复制代码
 console.log('在LoggerMiddleware中打印了日志。');

一个最简单的中间件就创建好了,接下来要做的就是配置中间件。

配置MiddleWare

首先,我们要知道我们创建的中间件的对象,比如你是要监听a模块的时候,你需要将该中间件添加到a模块中,而不是添加到app的module中,由于本demo只有app.module文件。所以我们要在app.module抛出的时候,将其处理下

javascript 复制代码
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes('*');
  }
}

​ 其中,在configure方法中,我们用apply引入了中间件LoggerMiddleware,且确定了他的使用范围。 在forRoutes中,我们一般会传入类似"user"之类的具体参数表示监听哪个控制类,"*"代表的是监听所有的控制类

如果是要排除某个控制器,比如要排除user的时候,我们会这么写

consumer.apply(LoggerMiddleware).exclude('article/(.)').forRoutes('');

该方式表示如果是以article开头的,则不会进入到我们的中间件中。

如果多个中间件,我们需要这么配置

javascript 复制代码
consumer
      .apply(LoggerMiddleware)
      .exclude('article/(.*)')
      .forRoutes('*')
      .apply(LoggerMiddleware)
      .exclude('article/(.*)')
      .forRoutes('*');

对于http请求的拦截以及处理,MiddleWare的对比守卫还有一个好处,就是处理token的时候,可以用Exclude对登陆模块可以做出排除,而使用守卫则需要在代码中手动排除。

公众号文章

一个分享开发知识的公众号,求大佬们关注~

相关推荐
前端付豪13 小时前
Nest 项目小实践之图书展示和搜索
前端·node.js·nestjs
前端付豪2 天前
Nest 项目小实践之前端注册登陆
前端·node.js·nestjs
Mr_li4 天前
NestJS 集成 TypeORM 的最优解
node.js·nestjs
前端付豪6 天前
Nest 项目小实践之注册登陆
前端·node.js·nestjs
Mr_li6 天前
手摸手,教你如何优雅的书写 NestJS 服务配置
node.js·nestjs
Jiude6 天前
AI 全栈时代的工程化护栏:Vben-Nest 让 Mock 契约落地成真实后端
前端·后端·nestjs
折七7 天前
NestJS 用了两年,我换了这个
typescript·node.js·nestjs
NEXT0614 天前
深度解析 JWT:从 RFC 原理到 NestJS 实战与架构权衡
前端·typescript·nestjs
明月_清风17 天前
从“搬运工”到“指挥官”:通过 IoC 容器重塑你的后端思维
后端·nestjs
UIUV18 天前
实现RAG功能学习笔记
react.js·langchain·nestjs