如何调试插座挂断错误的NodeJS?如何调试插座挂断错误的NodeJS?(How to debug

2019-05-16 17:15发布

我收到以下错误:

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和不用彷徨调用。 请建议的方法来跟踪是什么原因导致插座挂断电话,并在其上请求/调用它是。 谢谢

Answer 1:

发展快速而肮脏的解决方案

使用longjohn ,你将包含异步操作长的堆栈跟踪。

清洁和正确的解决方案 :从技术上讲,在节点中,只要你发出'error'事件,没人听它,它就会抛出 。 为了使它不扔,把它的监听器,并自己处理。 这样,你可以有更多的信息记录错误。

为了有一个监听器组的呼叫,您可以使用的领域也赶上运行其他错误。 确保与HTTP(服务器/客户端)每个异步操作是在不同的领域比较的代码的其他部分方面,该域名将自动倾听error事件,并将其传播到它自己的处理程序。 所以,你只能听该处理程序,并得到了错误的数据。 您也可以免费获得更多的信息。 (域是depreceated)。

正如Mike建议你还可以设置NODE_DEBUG=net或使用strace的 。 他们都为你提供了什么是节点内部做。



Answer 2:

此外,您可以设置NODE_DEBUG环境变量net获得什么所有的插座都在做信息。 这样,您就可以哪些远程资源重置连接隔离。



Answer 3:

除了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);
});

当我有这个“窝挂断”的错误,那是因为我没有赶上请求的错误。



Answer 4:

使用

req.on('error',function(err){})


Answer 5:

最有可能你的服务器套接字连接莫名其妙地被关闭之前所有http.ServerResponse对象已经结束。 请确保你已经在做与传入连接东西之前停止所有的请求(进来的连接东西比传入的HTTP请求不同)。



文章来源: How to debug a socket hang up error in NodeJS?