仅当路由稍后匹配时才显示中间件

时间:2015-09-02 16:35:34

标签: node.js express

我希望拥有受保护和不受保护的路由,并使其对未定义路由的请求即使在用户未经身份验证的情况下也会返回404。我遇到的问题是身份验证中间件在除了之前定义的路由之外的所有路由上运行,因此任何未定义的路由都会返回身份验证失败而不是404.以下是问题的一个示例:

module My::Very::Long::Module::Name
  FIRST_CONSTANT = 1
  SECOND_CONSTANT = 2
  THIRD_CONSTANT = 3
  ...
end

在这种情况下,没有令牌到随机路线的请求(例如/无论如何)将返回' auth failed'而不是404.你如何在Express中解决这个问题?

1 个答案:

答案 0 :(得分:3)

一种解决方案是将身份验证中间件移到路由处理程序之前的路由中:

// best auth ever
function checkAuth(req, res, next) {
  if(req.body.token) {
    return next();
  }

  res.send('auth failed');
}

router.get('/protected', checkAuth, function(req, res) {
  res.send('protected route');
});

您甚至可以通过在单独的路由器中定义所有路由然后执行router.use('/api', checkAuth, apiRouter)之类的操作来对一组路由执行此操作。

此外,默认情况下,如果没有路线匹配,快递将回复404,因此您不需要明确发送。