Express.js:匹配所有的路线

时间:2017-08-10 15:45:09

标签: javascript node.js express

可以针对多种模式检查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']){}
})

2 个答案:

答案 0 :(得分:1)

我不确定你为什么要解除单独的.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) { ... }
})

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

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

答案 1 :(得分:0)

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

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

})