我收到以下错误:
events.js:48
throw arguments[1]; // Unhandled 'error' event
^
Error: socket hang up
at createHangUpError (http.js:1091:15)
at Socket.onend (http.js:1154:27)
at TCP.onread (net.js:363:26)
在节点v0.6.6,我的代码有多个http.request和不用彷徨调用。 请建议的方法来跟踪是什么原因导致插座挂断电话,并在其上请求/调用它是。 谢谢
发展快速而肮脏的解决方案 :
使用longjohn ,你将包含异步操作长的堆栈跟踪。
清洁和正确的解决方案 :从技术上讲,在节点中,只要你发出'error'
事件,没人听它,它就会抛出 。 为了使它不扔,把它的监听器,并自己处理。 这样,你可以有更多的信息记录错误。
为了有一个监听器组的呼叫,您可以使用的领域也赶上运行其他错误。 确保与HTTP(服务器/客户端)每个异步操作是在不同的领域比较的代码的其他部分方面,该域名将自动倾听error
事件,并将其传播到它自己的处理程序。 所以,你只能听该处理程序,并得到了错误的数据。 您也可以免费获得更多的信息。 (域是depreceated)。
正如Mike
建议你还可以设置NODE_DEBUG=net
或使用strace的 。 他们都为你提供了什么是节点内部做。
此外,您可以设置NODE_DEBUG
环境变量net
获得什么所有的插座都在做信息。 这样,您就可以哪些远程资源重置连接隔离。
除了ftft1885的答案
http.get(url, function(res)
{
var bodyChunks = [];
res.on('data', function(chunk)
{
// Store data chunks in an array
bodyChunks.push(chunk);
}).on('error', function(e)
{
// Call callback function with the error object which comes from the response
callback(e, null);
}).on('end', function()
{
// Call callback function with the concatenated chunks parsed as a JSON object (for example)
callback(null, JSON.parse(Buffer.concat(bodyChunks)));
});
}).on('error', function(e) {
// Call callback function with the error object which comes from the request
callback(e, null);
});
当我有这个“窝挂断”的错误,那是因为我没有赶上请求的错误。
使用
req.on('error',function(err){})
最有可能你的服务器套接字连接莫名其妙地被关闭之前所有http.ServerResponse对象已经结束。 请确保你已经在做与传入连接东西之前停止所有的请求(进来的连接东西比传入的HTTP请求不同)。