这两个程序段之间有什么区别

时间:2018-07-06 10:16:06

标签: node.js express passport.js middleware

当我尝试创建中间件“护照”时,就会发生此问题。

该计划部分的效果很好:

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 :(得分:2)

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

答案 1 :(得分:0)

它有不同的花括号。在第一种情况下,“((req,res,next);”)是在第一行中开始的内部函数。 在第二种情况下,您在逗号后声明了新功能。