NestJS 的 中间件 学习

这篇具有很好参考价值的文章主要介绍了NestJS 的 中间件 学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基本概念

中间件是在路由处理程序之前调用的函数。中间件函数可以访问请求响应对象。在程序中我们可以让多个中间件串起来一起使用,当多个中间件一起使用时我们可以使用next()调用下一个中间件。

中间件主要是可以实现如下功能:

  • 执行任何代码
  • 更改请求和响应对象
  • 结束请求-响应周期
  • 调用堆栈中的下一个中间件函数
  • 如果当前的中间件函数没有结束请求-响应周期,则必须调用 next()将控制权传递给下一个中间件函数。否则,请求将被挂起

在 NestJS 中可以在函数或者带有@Injectable()装饰器装饰的类来定义中间件,并且使用类时我们必须实现NestMiddleware接口,函数不需要做特殊处理。

依赖注入

在 NestJs 中中间件可以使用依赖注入的方式进行注入使用,就像控制器和提供者一样进行注入。

需要使用的时候,我们可以通过constructor进行实例化,然后进行使用。

在模块中使用中间件

@Module装饰器装饰的类中,我们是没有地方进行注入的,我们只能在类中使用configure()来声明使用中间件,并且类还必须集成NestModule接口。

接下来我们声明一个日志中间件,主要是简单的把请求对象和响应对象打印一下,具体代码如下:

// 日志中间件
import { Injectable, NestMiddleware } from "@nestjs/common";
import { Request, Response, NextFunction } from "express";

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    console.log("-------");
    console.log(req);
    console.log(res);
    console.log("-------");
    next();
  }
}
// App模块
@Module({
  imports: [CommodityModule, AccountModule],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes("commodity");
  }
}

在上面这里例子中,我们的中间件主要是针对带有commodity前缀的所有请求路径进行处理,并且注入的中间件为LoggerMiddleware

我们还可以在forRoutes传入参数对象,从而过滤出符合的请求进入到中间件中进行处理。例如我们限定监听请求路径是commodity并且是POST的请求:

configure(consumer: MiddlewareConsumer) {
  consumer
    .apply(LoggerMiddleware)
    .forRoutes({ path: 'commodity', method: RequestMethod.POST });
}

forRoutes 的路由通配符

在上述的例子中,我们在forRoutes中传入路由参数后筛选出匹配的路由地址,其中path是匹配的路由地址,我们可以使用通配符来定义匹配的路由,而通配符设置规则已经在NestJS 的 Controller 学习文章中介绍过。

中间件消费者(MiddlewareConsumer 类)

MiddlewareConsumer是一个辅助类,它提供了几种内置方法来管理中间件。

forRoutes()方法传入的参数可以是字符串、多个字符串、RouterInfo 对象和控制器类,建议使用控制器类来作为forRoutes的参数,因为使用控制器类后,我们不需要过多的来维护监听的数据,这样维护效率会比较高并且清晰。

排除路线

有些时候我们希望排除某些路由应用中间件的时候,我们可以使用exclude()方法来排除某些路由。该方法传入的参数可以是字符串、多个字符串和 RouterInfo。具体的例子如下:

configure(consumer: MiddlewareConsumer) {
  consumer
    .apply(LoggerMiddleware)
    .exclude('account/(.*)')
    .forRoutes(CommodityController, AccountController);
}

函数中间件

当我们的中间件不需要任何成员、方法和依赖项的时候,可以使用函数中间件来替代类中间件。函数中间件的例子我们还是采用日志中间件为例,具体的例子如下:

export function MyLogger(req: Request, res: Response, next: NextFunction) {
  console.log("-------");
  console.log(req);
  console.log(res);
  console.log("-------");
  next();
}

全局中间件

全局中间件可以在main.ts文件中进行定义使用,具体如下:文章来源地址https://www.toymoban.com/news/detail-617219.html

const app = await NestFactory.create(AppModule);
app.use(logger);
await app.listen(3000);

到了这里,关于NestJS 的 中间件 学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Node.js中,什么是中间件(middleware)?它们的作用是什么?

    聚沙成塔·每天进步一点点 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而

    2024年02月06日
    浏览(32)
  • express学习笔记5 - 自定义路由异常处理中间件

    修改router/index.js,添加异常处理中间件 完整代码 创建 utils/constant:(为了方便后期统一维护,单独拉出来定义) 然后刷新http://localhost:8000/user  这就完成了

    2024年02月14日
    浏览(32)
  • 《分布式中间件技术实战:Java版》学习笔记(一):抢红包

    数据库建表 (1)red_send_record 记录用户发送了若干总金额的若干个红包。 (2)red_detail 记录用户发送的红包被分成的小红包金额。 (3)red_rob_record 记录用户抢到的红包金额。 随机生成红包金额 红包金额的最小单位是分,将红包金额放大100倍到int类型(为了方便生成随机数),保证

    2024年02月10日
    浏览(37)
  • node中间件-koa框架

    安装 npm i koa koa导出的是一个类,必须用 new 进行创建 koa也是通过注册中间件来完成请求操作的 koa注册的中间件提供了两个参数: ctx:上下文(Context)对象; koa并没有像express一样,将req和res分开,而是将它们作为ctx的属性; ctx代表一次请求的上下文对象; ctx.reque

    2024年02月16日
    浏览(38)
  • node中间件-express框架

    方式一 : express提供的脚手架,直接创建一个应用的骨架 安装脚手架npm install -g express-generator 创建项目 express express-demo 安装依赖npm install 启动项目 node bin/www 方式二 : 从零搭建自己的express应用结构; 初始化项目 npm init 安装express npm i express 导入–创建–监听 使用参考文档 中

    2024年02月16日
    浏览(42)
  • 第九篇:node静态文件服务(中间件)

     🎬 江城开朗的豌豆 :个人主页  🔥 个人专栏  :《 VUE 》 《 javaScript 》  📝  个人网站  :《 江城开朗的豌豆🫛 》  ⛺️ 生活的理想,就是为了理想的生活 ! 当今互联网时代,Node.js 成为了最受欢迎的服务器端开发平台之一。作为一名小白,学习 Node.js 可能会让你感

    2024年02月20日
    浏览(32)
  • 消息中间件学习笔记--RabbitMQ(二、模式,一次违反常规的Java大厂面试经历

    .Fanout:转发消息到所有绑定队列 比较常用的是Direct、Topic、Fanout. Fanout 这种Fanout模式不处理路由键,只·需要简单的将队列绑定到exchange上,一个发送到exchange的消息都会被转发到与该exchange绑定的所有队列上。很像广播子网,每台子网内的主机都获得了一份复制的消息。Fan

    2024年04月09日
    浏览(87)
  • cool Node后端 中实现中间件的书写

    1.需求 在node后端中,想实现一个专门鉴权的文件配置,可以这样来解释 就是 有些接口需要token调用接口,有些接口不需要使用token 调用  这期来详细说明一下      什么是中间件中间件顾名思义是指在请求和响应中间,进行请求数据的拦截处理,数据校验,并且进行逻辑处理

    2024年02月20日
    浏览(33)
  • 笔记:常见中间件漏洞

    Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的Cookie, 在服务端对rememberMe的Cookie值先base64解码然后AES解密再反序列化 序列化:序列化=》使用密钥进行AES加密=》base64加密 反序列化:base64解密=》使用密钥进行AES解密=》反序列化 因为默

    2024年02月13日
    浏览(32)
  • node 第十四天 基于express的第三方中间件multer node后端处理用户上传文件

    Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。它是写在 busboy 之上的所以非常高效。 前面我们已经知道了怎样利用express提供的静态资源处理中间件 express.static() 处理用户请求静态资源文件(图片, js, css等) 接下来学习如何处理用

    2024年02月06日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包