0

我有这个代码结构:

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并开始理解它的意思,但还没有。

4

1 回答 1

0

我认为您的应用程序中缺少错误处理程序。

当您将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

于 2014-09-26T15:18:30.980 回答