匹配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式。
- 为什么
'*'
匹配/
? - 我需要支持什么论点
all()
来匹配/about
而不是/
?
简单地说*
最后。 路由器按照定义的顺序进行检查。
所以:
router.get('/' ...
然后
router.all('*' ...
只要记住/
对于*
仍然有效,所以从/
的next()
调用将触发捕获所有进程。
由星号( '*'
)组成的path意思是“匹配任何东西”,其中只包括主机名。
为了只“匹配一些东西”,使用带有加号运算符的点号组,意思是“至less匹配一次”。
router.all(/\/^.+$/, () => { // ... })