• Nest


    中间件是在路由处理程序 之前 调用的函数
    中间件函数可以执行以下任务:

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

    您可以在函数中或在具有 @Injectable() 装饰器的类中实现自定义 Nest中间件。 这个类应该实现 NestMiddleware 接口

    实现一个中间件

    logger.middleware.ts

    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('Request...');
        next();
      }
    }
    

    使用中间件

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

    app.module.ts

    import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
    import { LoggerMiddleware } from './common/middleware/logger.middleware';
    import { CatsModule } from './cats/cats.module';
    
    @Module({
      imports: [CatsModule],
    })
    export class AppModule implements NestModule {
      configure(consumer: MiddlewareConsumer) {
        consumer
          .apply(LoggerMiddleware)
          .forRoutes('cats');
      }
    }
    

    中间件使用者

    • forRoutes() 可接受一个字符串、多个字符串、对象、一个控制器类甚至多个控制器类。在大多数情况下,您可能只会传递一个由逗号分隔的控制器列表

    app.module.ts

    import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
    import { LoggerMiddleware } from './common/middleware/logger.middleware';
    import { CatsModule } from './cats/cats.module';
    import { CatsController } from './cats/cats.controller.ts';
    
    @Module({
      imports: [CatsModule],
    })
    export class AppModule implements NestModule {
      configure(consumer: MiddlewareConsumer) {
        consumer
          .apply(LoggerMiddleware)
          .forRoutes(CatsController);
      }
    }
    
    • 想从应用中间件中排除某些路由,用该 exclude() ,LoggerMiddleware 将绑定到内部定义的所有路由,CatsController 但传递给 exclude() 方法的三个路由除外

    多个中间件

    consumer.apply(cors(), helmet(), logger).forRoutes(CatsController);
    

    全局中间件

    const app = await NestFactory.create(AppModule);
    app.use(logger);
    await app.listen(3000);
    
  • 相关阅读:
    Redis持久化
    环境搭建
    openresty了解基础
    正向代理和反向代理
    Java IO流:(十)字节缓冲流
    Java IO流:(九)缓冲流
    第二节:MySQL软件的卸载(Windows版)
    第一节:MySQL产品的介绍
    第一节:数据库相关知识
    MySQL【目录】
  • 原文地址:https://www.cnblogs.com/zzghk/p/15225787.html
Copyright © 2020-2023  润新知