快递.js:匹配全部捕获的路线



可以对照多种模式检查express.js路由吗?考虑下面的所有*路线。req.route与此处的*匹配。我想针对同一回调中的一些特殊场景检查路由~而不是在另一个alluse中间件中。

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']){}
})

我不确定您为什么要为此忽略单独的.all路由,因为在我看来,这是执行这些检查的最佳方式:

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) { ... }
})

或者,类似于克里斯的回答,有一条路线可以匹配两者:

app.all([ '/foo/:param', '/bar/:param' ], (req, res, next) => {
req.isSpecial = true;
next();
});

因此,您不应该尝试使用通配符来捕获所有内容,而是查找特定值。 相反,请创建一个查找这些特定值的终结点,然后使用另一个路由捕获所有通配符。

app.get(['/test', '/another_value'], (req, res, next) => {
})

最新更新