匹配Express中的所有路线,但是'/'

时间:2016-05-22 11:28:44

标签: javascript regex node.js express

我正在尝试通过检查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,你可以使用正则表达式进行路径匹配,但后来我真的不明白'*'是什么。它可能匹配所有东西,但它看起来不像我的正则表达式。

  1. 为什么'*'/匹配?
  2. 我需要向all()求助以匹配/about而不是/

2 个答案:

答案 0 :(得分:2)

简单地将*放在最后。路由器按照定义的顺序进行检查。

所以:

router.get('/' ...

然后

router.all('*' ...

请记住/*仍有效,因此来自next()的{​​{1}}来电将触发所有流程。 < / p>

答案 1 :(得分:1)

仅由星号('*')组成的路径表示&#34;匹配任何&#34;,其中仅包含主机名。

为了只匹配某些东西&#34;使用带有加号运算符的点组,这意味着&#34;匹配任何至少一次&#34;。

router.all(/\/^.+$/, () => {
  // ...
})