首页 > 解决方案 > 如何在 NodeJS 路由中正确注入中间件

问题描述

如何将我的中间件函数“checkAuthenticated”注入到下面的获取路径中?不知道如何正确注入下面的代码。请告诉我。非常感谢您。

function checkAuthenticated(req, res, next) {
  if(!req.header('authorization')) {
    return res.status(401).send({message: 'Unauthorized request.  Missing authentication header'});
  }

  let token = req.header('authorization').split(' ')[1];

  let payload = jwt.decode(token, '123');

  if(!payload) {
    return res.status(401).send({message: 'Unauthorized request.  Authetication header invalid'});
  }

  req.user = payload;

  next();
}

router.route('/:user_id')
  .get((req, res) => {
    User.findById(req.params.user_id, (err, user) => {
      if (err) {
        res.send(err);
      } else {
        res.json(user);
      }
    });
  })

标签: node.jsexpressroutesmiddleware

解决方案


这里有几个选项。我通常使用:

router.use('*', checkAuthenticated);

另一种选择是:

router.get('/:user_id', checkAuthenticated, (req, res) => { ... })

或者,使用您的示例router.route...

router.route('/:user_id').get(checkAuthenticated, (req, res) => { ... })

您还可以将它们链接在一起:

router.route('/:user_id').get(checkAuthenticated).get((req, res) => { ... })

推荐阅读