Node.js 这两个节目段有什么不同

Node.js 这两个节目段有什么不同,node.js,express,passport.js,middleware,Node.js,Express,Passport.js,Middleware,当我尝试创建中间件“Passport”时,就会出现这个问题 此程序段运行良好: router.post('/login',function(req,res,next) { passport.authenticate('local', function(err,user,message){ res.send(message.message); }) (req, res, next); }); 但当我把它改成: router.post('/login', funct

当我尝试创建中间件“Passport”时,就会出现这个问题

此程序段运行良好:

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){

});
post请求没有结束。装载不会停止


这些代码片段之间有什么区别?我认为这两个程序是相同的。

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)=>{}
永远不会执行

这就是为什么请求没有结束

尝试:


它有不同的支架。在第一种情况下,“(req,res,next);”位于从第一行开始的函数内部。 在第二种情况下,您在逗号后声明了新函数

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