Nest.js排除中间件的路径

时间:2019-08-02 13:17:06

标签: express nestjs

我想将MyMiddleware应用于所有路由(例如/foo/bar),而不是/

以下配置无效,因为它也将中间件应用于/

@Module({
  controllers: [MyController],
})
export default class AppModule implements NestModule {

  configure(consumer: MiddlewareConsumer) {
    consumer.apply(MyMiddleware).exclude('/').forRoutes('/*');
  }

}

有帮助吗?

1 个答案:

答案 0 :(得分:3)

我自己解决了。

我误解了此文档段落:

  

字符?,+,*和()可以在路由路径中使用,并且是其正则表达式对应项的子集。连字符(-)和点(。)由基于字符串的路径按字面意义解释

我发现链接到https://www.npmjs.com/package/path-to-regexp的expressJs的语法相同。

我已经使用了这个有用的工具http://forbeslindesay.github.io/express-route-tester/来找出幕后应用的正则表达式

解决我的情况的方法很简单:

@Module({
  controllers: [MyController],
})
export default class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(MyMiddleware).forRoutes('/[a-zA-Z0-9-/_]+');
  }
}