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

我试图通过检查cookie为我的应用程序创build一个身份validation机制。 所以我添加了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 }); 

根据这里的答案,你可以使用正则expression式进行path匹配,但是我不太了解'*'是什么。 它可能匹配一切,但它看起来不像正则expression式。

  1. 为什么'*'匹配/
  2. 我需要支持什么论点all()来匹配/about而不是/

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

所以:

 router.get('/' ... 

然后

 router.all('*' ... 

只要记住/对于*仍然有效,所以从/next()调用将触发捕获所有进程。

由星号( '*' )组成的path意思是“匹配任何东西”,其中只包括主机名。

为了只“匹配一些东西”,使用带有加号运算符的点号组,意思是“至less匹配一次”。

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