JSON - 发送后无法发送标头

时间:2015-07-09 03:44:58

标签: node.js

有时,当我运行此代码时,我收到以下错误。

Error: Can't set headers after they are sent.

为什么会这样?我该如何解决?

User.findOne({username: username}, function(err, user) {
 if (err) {
  console.log(err);
  res.json({
   success: false,
   message: "Unknown error."
  });
 }

 if (user != undefined) {
  res.json({
   success: true,
   message: "User exists."
  });
 }
 else {
  res.json({
   success: true,
   message: "User does not exist."
  });
 }

});

3 个答案:

答案 0 :(得分:6)

即使出现mongoose错误,您的代码仍会继续运行,从而导致您的应用尝试响应请求两次。只需在json响应后添加一个返回值。像这样:

if (err) {
    console.log(err);
    res.json({
        success: false,
        message: "Unknown error."
    });
    return;
}

答案 1 :(得分:2)

有时,DB会在出现错误时响应两次。要结束回复,只需返回;

if (error) {
    console.log(error);
    response.json({
        success: false,
        message: "An error occurred."
    });
    return;
}

答案 2 :(得分:0)

如果第一个条件为真,那么应用程序不会转到任何其他条件来发送响应

 else if (user != undefined) {