代码之家  ›  专栏  ›  技术社区  ›  Anu

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

  •  1
  • Anu  · 技术社区  · 6 年前

    当我试图创建一个中间件“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请求没有结束。装载没有停止。

    这些代码片段有什么区别?我认为两个程序是一样的。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Anand Undavia    6 年前

    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);    
    }));
    
        2
  •  0
  •   Michał Czajka    6 年前

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