使用节点的回调样式

时间:2014-09-26 15:04:45

标签: node.js passport.js express-jwt

我有这个代码结构:

app.post('/signin', function(req, res, next) {
passport.authenticate('local-login', function(err, user, info) {
  if (err) { 
    // return next(err);
    return res.send(401)
  }
  if (!user) { 
    return res.send(401); 
  }
    var token = jwt.sign({ user: user}, secret.secretToken, { expiresInMinutes: 60*5 });
    res.json({ token : token });
})(req, res, next);
});
如果我将return next(err);行注释掉,

代码效果很好。那么,如果我将它与res.send(401)结合使用会有什么好处,那就完全可以了。

我读到这个:http://howtonode.org/control-flow-part-ii并开始理解其含义,但我还没有。

1 个答案:

答案 0 :(得分:0)

我认为您在申请中遗漏了error handler

Error实例传递给next函数时,将执行错误处理程序。例如:

app.use(function myErrorHandler(err, req, res, next) {
    console.log(err);
    res.send(500, "There was an error.");
});

请注意,该函数有4个参数,而不是3个正常参数。现在,当您的应用运行并执行此操作时:

next(new Error("Some error"));
return;

然后调用您的错误处理程序。

您现在正在做的事情基本上是在每条正常路线中重复您的错误处理代码("发送状态401")。有现成的记录器,如Morgan