我正在尝试通过检查Cookie为我的应用创建身份验证机制。所以我添加router.all('*')
来匹配每个请求,检查cookie,然后转到实际的处理程序。但我需要它只匹配'/'后面有一个或多个字符的请求。 (我想匹配/manage
,/m
或/about
,但不匹配/
)。
//Assuming a request for '/', this gets called first
router.all('*', function (request, response, next) {
//Stuff happening
next();
});
//This gets called on next(), which I do not want
router.get('/', function (request, response) {
//Stuff happening
});
//However this I do want to be matched when requested and therefore called after router.all()
router.post('/about', function (request, response) {
//Stuff happening
});
根据答案here,你可以使用正则表达式进行路径匹配,但后来我真的不明白'*'
是什么。它可能匹配所有东西,但它看起来不像我的正则表达式。
'*'
与/
匹配? all()
求助以匹配/about
而不是/
?答案 0 :(得分:2)
简单地将*
放在最后。路由器按照定义的顺序进行检查。
所以:
router.get('/' ...
然后
router.all('*' ...
请记住/
对*
仍有效,因此来自next()
的{{1}}来电将触发所有流程。 < / p>
答案 1 :(得分:1)
仅由星号('*'
)组成的路径表示&#34;匹配任何&#34;,其中仅包含主机名。
为了只匹配某些东西&#34;使用带有加号运算符的点组,这意味着&#34;匹配任何至少一次&#34;。
router.all(/\/^.+$/, () => {
// ...
})