Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express.js:catch all中的匹配路线_Javascript_Node.js_Express - Fatal编程技术网

Javascript Express.js:catch all中的匹配路线

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']){} }) 因此,您不应该尝试使用通配符来捕获所有内容,

可以根据多种模式检查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.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处理程序更干净。