Node: http.request()行为在发生错误时

node: http.request() behaviour in case of an error

本文关键字:错误 http request Node      更新时间:2023-09-26

我观察到http.request() Node.js API的一些奇怪(至少从我的角度来看)行为。

  var req = http.request(options, function (res) {
      cb(null, res);
  });
  req.on("error", function (err) {
      cb(err, null);
  });

现在请求由于错误(HPE_INVALID_CONSTANT)而失败,这将导致调用错误回调。然而,http.request()的回调也被调用。

在我看来,如果有错误就不应该发生这种情况,就像如果有(有效的)响应就不应该有错误一样。它们中只有一个应该被调用——这是我所期望的。在这里,它们都被调用,这导致我的进一步的程序流被调用两次…

是我错过了什么,还是别人也觉得很奇怪?

回调实际上是"response"事件的监听器。因此,如果有响应,它将被调用,即使该响应是否令人满意。

HPE_INVALID_CONSTANT意味着响应有问题,但实际上是一个响应,因此回调将被执行。