Какая разница между этими двумя программными сегментами - PullRequest
0 голосов
/ 06 июля 2018

Когда я пытаюсь создать промежуточное программное обеспечение «Паспорт», возникает эта проблема.

Этот сегмент программы работает хорошо:

router.post('/login',function(req,res,next) {
   passport.authenticate('local', function(err,user,message){
      res.send(message.message);    
   }) (req, res, next);
});

Но когда я изменил это на:

router.post('/login', function (req, res, next) {
  passport.authenticate('local',(err, user,message) => {
    res.send(message.message);  
  });
}, function(req, res, next){

});

Почтовый запрос не заканчивается. Загрузка не останавливается.

В чем разница между этими фрагментами кода? Я думаю, что обе программы одинаковы.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

У него разные брекеты. В первом случае "(req, res, next);" внутренняя функция запущена в первой строке. во втором случае вы объявили новую функцию после запятой.

0 голосов
/ 06 июля 2018

passport.authenticate() возвращает функцию промежуточного программного обеспечения. Итак, в первом фрагменте, что вы делаете, это

router.post('/login',function(req,res,next) {
  var middleware = passport.authenticate('local',(err, user,message) => {
    res.send(message.message);  
  }); // middleware is now a function. You can call it!

  middleware(req, res, next);
});


Во втором фрагменте возвращаемая функция промежуточного программного обеспечения никогда не используется. Таким образом, ваш (err, user,message) => {} никогда не выполняется.

И поэтому запрос не заканчивается.

Попробуйте:

router.post('/login', passport.authenticate('local', function(err,user,message) {
  res.send(message.message);    
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...