我想将MyMiddleware
应用于所有路由(例如/foo
,/bar
),而不是/
以下配置无效,因为它也将中间件应用于/
@Module({
controllers: [MyController],
})
export default class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(MyMiddleware).exclude('/').forRoutes('/*');
}
}
有帮助吗?
答案 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-/_]+');
}
}