nestjs中间件简介

nestjs 开发过程中可能会碰到一些需要通过监听用户行为等功能,那么可能就会用到了中间件功能了,例如:我们建立一个日志监听用户访问接口频率,监听用户访问接口的版本等

中间件简介

中间件是在路由处理程序 之前 调用的函数。 中间件函数可以访问请求和响应对象,以及应用程序请求响应周期中的 next()中间件函数。next() 中间件函数通常由名为 next 的变量表示

Nest 中间件实际上等价于 express 中间件

中间件函数可以执行以下任务:

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

您可以在函数中或在具有 @Injectable() 装饰器的类中实现自定义 Nest中间件。 这个类应该实现 NestMiddleware 接口, 而函数没有任何特殊的要求

js 复制代码
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';

@Injectable()
export class AppMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    //可以在这里处理我们想处理的任务,需要住一定的是别忘了next的执行
    next();
  }
}

中间件不能在 @Module() 装饰器中列出。我们必须使用模块类的 configure() 方法来设置它们。包含中间件的模块必须实现 NestModule 接口。我们将 AppMiddleware 设置在 ApplicationModule 层上,即: AppModule

ps:一般根据自己需求放在所属,我这里假设是一个全局的日志监听,就放到 app 中,就自然到 appmodule 中了

js 复制代码
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { AppMiddleware } from './app.middleware';
import { UserController } from './user/user.controller';
import { ArticleController } from './article/article.controller';

@Module({
  imports: [],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(AppMiddleware)
      .forRoutes('user', 'article') //支持字符串
      .forRoutes({ path: 'user', method: RequestMethod.GET }) //支持请求类型
      .forRoutes({ path: 'u*r', method: RequestMethod.ALL }) //支持通配符
      .forRoutes('*') //通配符所有请求
      .forRoutes(UserController, , ArticleController) //支持直接传递类
      .exclude(
        { path: 'user', method: RequestMethod.GET }, //支持过滤排除
        { path: 'user', method: RequestMethod.POST },
        'user/(.*)',
      )
  }
}

这样就可以实现中间件监听网络请求了

相关推荐
悟空瞎说2 天前
企业级 NestJS + Prisma 分层架构:单例客户端、生命周期托管与可复用扩展实践
nestjs
悟空瞎说5 天前
NestJS 接口设计避坑:摒弃万能用户更新接口,落地单一职责与最小权限原则
后端·nestjs
光影少年8 天前
HashRouter 和 BrowserRouter 区别、底层原理、部署差异
前端·react.js·nestjs
悟空瞎说9 天前
NestJS 12 预览版重磅来袭:全面原生 ESM 正式落地
nestjs
刚子编程20 天前
从零开始:在 Windows 服务器上部署 Node.js 项目(小白实战教程)
服务器·nestjs·pm2·windowsserver·node.js部署·caddy反向代理
CSharp精选营20 天前
从零开始:在 Windows 服务器上部署 Node.js 项目(小白实战教程)
nestjs·pm2·windowsserver·node.js部署·caddy反向代理
晓杰'22 天前
从0到1实现Balatro游戏后端(8):Skip Blind与Tag奖励机制设计与实现
后端·websocket·typescript·项目实战·nestjs·状态管理·游戏服务器
小蜜蜂dry1 个月前
nestjs实战-权限二:角色模块
前端·后端·nestjs
小蜜蜂dry1 个月前
nestjs实战-权限一: 菜单模块
前端·后端·nestjs
妖孽白YoonA1 个月前
xlt-token v1.0.0 正式发布:NestJS / Express 一包接入的 Token 鉴权库
后端·node.js·nestjs