【问题标题】:Can't set headers after they are sent. How to avoid it?发送后无法设置标题。如何避免?
【发布时间】:2017-05-31 05:24:40
【问题描述】:

我正在使用通过 kafka-node 连接到 Kakfa 的 Node JS 应用程序。我发现了一些例外情况,即连接到 kafka 时出现任何错误。这是代码。发送后我无法设置标题。避免这种情况的最佳方法是什么?

// Some processing goes above
producer.on('error', function(err){
    console.log(err);
    res.status(500).send("Oh uh, something went wrong");
})
res.end();

我很确定这是因为代码在错误循环之后继续。如何在不删除错误处理程序中的发送的情况下避免这种情况。

【问题讨论】:

  • 基于共享代码我没有收到错误。但通常在发送响应后尝试设置响应时会发生错误。
  • 当代码进入错误处理函数时,我正在发送。我想这是连接结束并设置标题的地方。当它不在循环时,我又在做 res.end。可能这就是问题所在。如果我错了,请纠正我!

标签: node.js error-handling response-headers


【解决方案1】:

实际上您的问题是您使用的是 res.send 的 express,而 res.send 会自动执行 res.end(); 这就是您收到该错误的原因,请删除 res.end()

【讨论】:

  • 是的,只有这样。但是如果错误处理程序从未调用过呢?在这种情况下,它将调用 res.end!那么,如果 res.send 已经被调用,有什么办法可以避免调用 res.end 呢?
  • 我在这里看不到问题,如果您有错误设置状态并发送它。查看更多代码会很有帮助,因为不清楚如果没有错误会发生什么。设置标头错误意味着您正在尝试发送已发送的响应。
猜你喜欢
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多