8.nestjs中间件教程

本文详细介绍了NestJS框架中中间件的创建、配置、应用和管理。从命令行创建中间件开始,逐步讲解如何在app.module.ts中配置中间件,包括匹配所有、特定及多个路由。此外,还探讨了函数式中间件的创建和使用,以及如何设置全局中间件。通过这些步骤,读者可以深入理解NestJS中间件的使用方法。
摘要由CSDN通过智能技术生成

中间件

1.创建中间件

命令行创建中间件,然后自动生成

nest g middleware middleware/init

Init.middleware.ts

import { Injectable, NestMiddleware } from '@nestjs/common';
@Injectable()
export class InitMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log(Date());
    next();
  }
}

2.配置中间件

在app.module.ts中引入中间件并配置

// 1.引入NestModule,MiddlewareConsumer,InitMiddleware
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { InitMiddleware } from './middleware/init.middleware'
@Module({
  imports: [],
  controllers: [AppController, NewsController, UserController, ProductController],
  providers: [AppService],
})
// 2.配置中间件
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(InitMiddleware)
      // .forRoutes('*'); // 1. 匹配所有路由
      // .forRoutes('news'); // 2. 匹配指定路由
      .forRoutes({ path: 'news', method: RequestMethod.ALL }, { path: 'product', method: RequestMethod.ALL }); // 3. 匹配多个路由
  }
}

3.多个中间件

		// 二、多个中间件
    // consumer
    // .apply(InitMiddleware)
    // .forRoutes('*')
    // .apply(UserMiddleware)
    // .forRoutes('user')

    // 三、写法三 用的比较多
    consumer
    .apply(UserMiddleware, NewsMiddleware, logger)
    .forRoutes(
      { path: 'user', method: RequestMethod.ALL },
      { path: 'news', method: RequestMethod.ALL },
    )

4.函数式中间件

创建

在middleware文件夹下创建logger.middleware.ts

// 四、函数式中间件
export function logger(req, res, next) { 
    console.log('函数式中间件'); 
    next(); 
}

使用

app.module.ts

import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
// ...
import { logger } from './middleware/logger.middleware'

@Module({
  //...
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    
    // 函数式中间件的使用-logger
    consumer
    .apply(UserMiddleware, NewsMiddleware, logger)
    .forRoutes(
      { path: 'user', method: RequestMethod.ALL },
      { path: 'news', method: RequestMethod.ALL },
    )
  }
}

5.全局中间件

创建

使用上变的函数式中间件

使用

main.ts

注意:

​ 1.在main.ts中使用

​ 2.全局中间件只能引入函数式中间件

// ...
// 引入函数式中间件
import { NestExpressApplication } from '@nestjs/platform-express';

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  //...
  // 使用全局中间件
  app.use(logger);
  await app.listen(3000);
}
bootstrap();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值