use*_*956 50 sockets debugging http node.js
我收到以下错误:
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)
Run Code Online (Sandbox Code Playgroud)
在节点v0.6.6中,我的代码有多个http.request和.get调用.请建议如何跟踪导致套接字挂断的原因以及请求/呼叫的方式.谢谢
Far*_*hat 40
快速而肮脏的开发解决方案:
使用 longjohn,您将获得包含异步操作的长堆栈跟踪.
清晰且正确的解决方案:从技术上讲,在节点中,无论何时发出'error'
事件并且没有人收听它,它都会抛出.为了使它不被抛出,请在其上放置一个监听器并自己处理它.这样,您可以使用更多信息记录错误.
要为一组调用创建一个侦听器,您可以使用域 并在运行时捕获其他错误.确保与http(服务器/客户端)相关的每个异步操作与代码的其他部分相比处于不同的域上下文中,域将自动侦听(域名被剥夺了).error
事件并将其传播到自己的处理程序.所以你只听那个处理程序并获取错误数据.您还可以免费获得更多信息.
如Mike
建议你也可以设置NODE_DEBUG=net
或使用strace.它们都为您提供内部节点的功能.
fwo*_*fel 11
除了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);
});
Run Code Online (Sandbox Code Playgroud)
当我有这个"套接字挂断"错误时,这是因为我没有捕获请求错误.