NestJS学习笔记之中间件

warning: 这篇文章距离上次修改已过295天,其中的内容可能已经有所变动。

在NestJS中,中间件是一种组织应用程序逻辑的方式,它可以拦截进入的请求和传出的响应。

  1. 创建一个中间件

在NestJS中,你可以通过定义一个类并使用@Injectable()装饰器来创建一个中间件,并实现NestJS提供的NestMiddleware接口。




import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
 
@Injectable()
export class MyMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction): void {
    console.log('Request...');
    next();
    console.log('Response...');
  }
}
  1. 应用中间件

你可以在模块的根级别或者在特定的控制器或者路由级别应用中间件。




import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { MyMiddleware } from './my.middleware';
 
@Module({})
export class ApplicationModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(MyMiddleware)
      .forRoutes('*'); // 应用于所有路由
  }
}

在上述代码中,MyMiddleware将会应用于所有的路由。你也可以通过指定路由的路径或者特定的控制器来限制中间件的应用范围。

  1. 中间件链

NestJS支持中间件链,你可以通过调用consumer的.apply()方法多次来构建一个中间件链。




configure(consumer: MiddlewareConsumer) {
  consumer
    .apply(Middleware1, Middleware2)
    .forRoutes('*');
}
  1. 使用第三方中间件

NestJS提供了一个方便的方式来使用第三方中间件。你只需要将第三方中间件包装成NestJS的中间件格式即可。




import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as expressSession from 'express-session';
 
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
 
  app.use(expressSession({
    secret: 'my-secret',
    resave: false,
    saveUninitialized: true,
  }));
 
  await app.listen(3000);
}
bootstrap();

在上述代码中,我们使用了express-session库,它是一个非常流行的session中间件,在NestJS应用中,我们通过app.use()方法将其应用到了我们的应用中。

以上就是NestJS中间件的基本使用方法。

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日