次のエラーが表示されます。
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および.get呼び出しがあります。ソケットのハングアップの原因と、それがどのリクエスト/コールであるかを追跡する方法を提案してください。ありがとうございました
開発のための迅速で汚れたソリューション:
longjohn を使用すると、非同期操作を含む長いスタックトレースが取得されます。
クリーンで正しいソリューション:技術的には、ノードで、 'error'
イベントを発行し、誰もそれをリッスンしない場合)スローされます 。スローしないようにするには、リスナーを配置して自分で処理します。そうすれば、より多くの情報でエラーを記録できます。
呼び出しグループに1つのリスナーを設定するには、 domains を使用し、実行時に他のエラーをキャッチすることもできます。 http(Server/Client)に関連する各非同期操作が、コードの他の部分と比較して異なる domain コンテキストにあることを確認してください。ドメインは(ドメインは非推奨です)。error
イベントを自動的にリッスンし、それを独自のハンドラーに伝搬します。そのため、そのハンドラーをリッスンし、エラーデータを取得するだけです。 無料で詳細情報も入手できます。
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要求とは別のものです)。