NodeJs / Express如何加载验证中间件

时间:2018-08-17 21:16:59

标签: node.js express

我的主文件称为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 个答案:

答案 0 :(得分:0)

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

否则,您可以尝试一下,看看是否可行。