Javascript 在使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?

Javascript 在使用iojs创建http请求时,如何捕获EHOSTDOWN套接字错误?,javascript,node.js,sockets,http,Javascript,Node.js,Sockets,Http,我有一个简单的iojs http服务器,它与我的开发机器上的另一个http后端进行通信。现在我的ip已更改,后端请求由于ip错误而无法工作。我已经(或至少认为是这样)实施了错误管理,但在某些情况下,由于未处理的异常,服务器会崩溃: 执行两个后续请求时,第一个请求“挂起”,然后第二个请求使服务器崩溃: events.js:141 throw er; // Unhandled 'error' event ^ Error: connect EHOSTDOWN 192

我有一个简单的iojs http服务器,它与我的开发机器上的另一个http后端进行通信。现在我的ip已更改,后端请求由于ip错误而无法工作。我已经(或至少认为是这样)实施了错误管理,但在某些情况下,由于未处理的异常,服务器会崩溃:

执行两个后续请求时,第一个请求“挂起”,然后第二个请求使服务器崩溃:

events.js:141
      throw er; // Unhandled 'error' event
            ^
Error: connect EHOSTDOWN 192.168.1.11:80 - Local (192.168.1.10:54125)
    at Object.exports._errnoException (util.js:846:11)
    at exports._exceptionWithHostPort (util.js:869:20)
    at connect (net.js:840:14)
    at lookupAndConnect (net.js:933:5)
    at Socket.connect (net.js:902:5)
    at Agent.exports.connect.exports.createConnection (net.js:61:35)
    at Agent.createSocket (_http_agent.js:177:16)
    at Agent.addRequest (_http_agent.js:147:23)
    at new ClientRequest (_http_client.js:132:16)
    at Object.exports.request (http.js:30:10)
所讨论的错误不会触发
backRequest.on(“error”,errFn)
,它不是
函数(err,response,body)
中的标准错误。不能用try…catch来捕捉它

如何捕捉并优雅地处理此错误

我对net.js/http.js有一些了解。手动发出套接字错误时:

backendRequest.on("socket", function(socket) {
    socket.emit("error", "DIE!");
});
它由普通错误处理程序处理。然而,EHOSTDOWN错误并非如此。原因似乎是套接字错误处理程序只在socket.connect()之后的下一个勾号上安装(请参阅)

然而,“My”错误是在connect()时直接触发的(必须与仍在尝试查找主机的第一个连接有关)

我可以使用自定义代理正常捕获该错误。createConnection:

var socket = net.createConnection(options);
// install error handler immediately
socket.on("error", function(err) {
    console.log("AHA", err);
});
return socket;
然而,这似乎非常冗长和庞大。这真的是最好的方法吗?这个错误似乎没有那么特别,而且在核心libs中似乎没有得到处理。为什么会这样?为什么套接字错误处理程序只安装在nextTick上

你如何正确地抓住那个错误?代理是正确的方式吗


可以在这里找到一个“完整”的示例:

正如评论员所指出的:这是一个bug

这似乎是一个bug,正在解决:是的,在