Nest.js学习之路(8)-Middleware in nest.js(上)

Middleware是在request/response周期开始/结束修改request/response物件,这是express framework的feature。

以Logger功能为例,建立logger.middleware.ts

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

@Injectable()
export class LoggerMiddleware implements NestMiddleware { // 必须实现NestMiddleware接口
  resolve(...args: any[]): MiddlewareFunction { 
    return (req, res, next) => { // 會接收request、response及next方法
      console.log('Logger....');
      next(); //告诉nest.js继续下一个middleware,如果没有,则交给request handler
    };
  }
}

Middleware是套用在Module Level,到app.module.ts新增middleware相关代码

修改app.module.ts

import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';

import { AppController } from './app.controller';
import { AppService } from './app.service';
import { LoggerMiddleware } from './shared/middlewares/logger.middleware';
import { SharedModule } from './shared/shared.module';
import {cors} from 'cors'; //允許cors

@Module({
imports: [SharedModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements NestModule{
    configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware, cors) //指定要套用哪个Middleware,可以套用多个middleware,以逗點分隔
      .forRoutes(AppController); // 指定哪些routes要套用,可以传入Controller或是Controller数组
    }
}

用Postman发出request测试


Nest.js学习之路(8)-Middleware in nest.js(上)_第1张图片
2018110512.png

其他设定

  • exclude()
    • 指定哪些route不套用middleware

例如,POST不套用
修改app.module.ts如下:

...

configure(consumer: MiddlewareConsumer ) {
    consumer
      .apply(LoggerMiddleware, cors) // 要套用哪个Middleware,可以套用多个middleware,以逗号分隔
      .exclude( // 列举排除的routes
        { path: '/', method: RequestMethod.POST },
        { path: 'users', method: RequestMethod.GET}
      )
      .forRoutes(AppController); // 指定哪些routes要套用,可以传入Controller或是Controller数组
  }
...

推荐一下我的公众号: 【 geekjc 】,微信号: 【 c8706288 】一起学习交流编程知识,分享经验,各种有趣的事。

tuiguang.png

你可能感兴趣的:(Nest.js学习之路(8)-Middleware in nest.js(上))