как правильно внедрить промежуточное ПО в маршрут NodeJS - PullRequest
0 голосов
/ 12 июня 2019

Как я могу добавить свою функцию промежуточного программного обеспечения 'checkAuthenticated' в мой маршрут get ниже?не уверен, как правильно ввести код ниже.Пожалуйста, дайте мне знать.Большое спасибо.

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);
      }
    });
  })

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

проверьте эту надежду, это поможет вам

router.route('/:user_id')
.all((req, res, next) => {
  if (req.user) {
    next();
  } else {
    res.redirect('/');
  }
})
.get((req, res) => {
  res.json(req.user);
});
0 голосов
/ 12 июня 2019

Здесь есть несколько вариантов.Я обычно использую:

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) => { ... })
...