0

我的主文件称为 index.js,我在其中加载了一些内容,然后分支到位于不同文件中的路由。我现在的问题是因为我有几个 app.use 像这样检查有效令牌的部分。

app.use(function(req, res, next) {
// check header or url parameters or post parameters for token
var token = req.body.token || req.query.token || req.headers['x-access-token'];
// decode token
if (token) {
    console.log('MyToken:'+token)

  // verifies secret and checks exp
  jwt.verify(token, 'MySuperSecret', function(err, decoded) {      
    if (err) {
        if (err.name === 'TokenExpiredError')
        {
            return res.status(401).send({ success: false, error: err.name, message: err.message, expiredAt: err.expiredAt })   
        }
        else{
            return res.send({ success: false, message: 'Failed to authenticate token.' });
        }


    } else {
      // if everything is good, save to request for use in other routes
      console.log('success')
      req.decoded = decoded;   
      res.locals.decoded = decoded;
      next();
    }
  });

} else {

  // if there is no token
  // return an error
  return res.status(403).send({ 
      success: false, 
      message: 'No token provided.' 
  });

}

})

我的问题是,如果我在声明任何单独的路由之前将这个 app.use 函数放在我的 index.js 中,例如

app.use('/api', apiRoutes);

代码仍然会命中并使用 app.use 函数,还是我必须将 app.use 函数放在每个路由文件的顶部以保护下面的路由。如果一个人有超过 1 个路由文件,试图找出最好的方法是什么。

4

1 回答 1

0

您可以通过指定正则表达式来应用中间件。也许app.use('/api.*', myMiddleware)会有所帮助。

否则,您可以尝试一下,看看它是否有效。

于 2018-08-17T22:28:46.187 回答