Javascript Express.js:catch all中的匹配路线
可以根据多种模式检查express.js路由吗?考虑捕获所有路径*路由。我想根据同一回调中的一些特殊场景检查路由,而不是在另一个all或use中间件中Javascript Express.js:catch all中的匹配路线,javascript,node.js,express,Javascript,Node.js,Express,可以根据多种模式检查express.js路由吗?考虑捕获所有路径*路由。我想根据同一回调中的一些特殊场景检查路由,而不是在另一个all或use中间件中 app.all('*', (req, res, next) => { // How do I check if route is a special case like below if(req.route in ['/foo/:param', '/bar/:param']){} }) 因此,您不应该尝试使用通配符来捕获所有内容,
app.all('*', (req, res, next) => {
// How do I check if route is a special case like below
if(req.route in ['/foo/:param', '/bar/:param']){}
})
因此,您不应该尝试使用通配符来捕获所有内容,而应该查找特定的值。相反,创建一个查找这些特定值的端点,然后使用另一个路由来捕获所有通配符
app.get(['/test', '/another_value'], (req, res, next) => {
})
我不知道你为什么要拒绝分开。所有的路线都是这样的,因为在我看来,这是执行这些检查的最佳方式:
app.all('/foo/:param', (req, res, next) => {
req.isFoo = true;
next();
});
app.all('/bar/:param', (req, res, next) => {
req.isBar = true;
next();
});
app.all('*', (req, res, next) => {
if (req.isFoo || req.isBar) { ... }
})
或者,与Chris的回答类似,有一条路线可以同时匹配这两条路线:
app.all([ '/foo/:param', '/bar/:param' ], (req, res, next) => {
req.isSpecial = true;
next();
});
也许我不清楚。我需要像我的代码建议的那样在一个catch-all中检查这个。我的全部捕获需要执行身份验证,但忽略一些路径。谢谢Robert。这就是我最后要做的。希望有一个express.matches这样的功能来避免另一个all-route。@AnshulKoka有一些模块可以使用,但我认为使用单独的app.all处理程序更干净。