NestJS核心成员组成-中间件

本文介绍了如何在NestJS中创建和配置MiddleWare,包括基本的中间件创建,如LoggerMiddleware的示例,以及如何在模块级别进行配置,以拦截和处理HTTP请求,同时提到MiddleWare在处理token时的优势。
摘要由CSDN通过智能技术生成

在这里插入图片描述

关于MiddleWare

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

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

创建MiddleWare

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

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

生成的代码如下:

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

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

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

 console.log('在LoggerMiddleware中打印了日志。');

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

配置MiddleWare

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

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开头的,则不会进入到我们的中间件中。

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

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

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

公众号文章

在这里插入图片描述

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

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值