跳至主要內容

中间件

刘春龙原创...大约 2 分钟NodejsNestjs教程文档

中间件是一个称为 before 路由处理程序的函数。 中间件函数可以访问 requestresponse 对象,以及应用请求-响应周期中的 next() 中间件函数。 next 中间件函数通常由名为 next 的变量表示。

默认情况下,Nest 中间件等同于 express 中间件。 官方 express 文档中的以下描述描述了中间件的功能

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

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

现在我们创建一个logger中间件

nest g mi ./middleware/logger

我们看到在src/middleware目录下

import { Injectable, NestMiddleware } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    next();
  }
}

简单修改

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();
  }
}

Nest 中间件完全支持依赖注入。 就像提供者和控制器一样,他们能够在同一模块中使用 注入依赖。 像往常一样,这是通过 constructor 完成的。

应用中间件

@Module() 装饰器中没有中间件的位置。 相反,我们使用模块类的 configure() 方法设置它们。 包含中间件的模块必须实现 NestModule 接口。 让我们在 AppModule 级别设置 LoggerMiddleware

import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { LoggerMiddleware } from 'src/middleware/logger/logger.middleware';
import { UserModule } from './modules/user/user.module';


@Module({
  imports: [CatsModule],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .forRoutes('user');
  }
}

现在我们每次访问user模块下的路由地址http://localhost:3000/user,都会在控制台打印Request...

或者也可以具体到某一个请求方法

export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .forRoutes({ path: 'user', method: RequestMethod.GET });
  }
}

全局中间件

如果我们想一次将中间件绑定到每个已注册的路由,我们可以使用 INestApplication 实例提供的 use() 方法:

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

 

上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7