2017-08-04 3 views
0

データを取得するためにリモートサーバーにアクセスする必要のあるアプリケーションがあり、そのためにsample.jsをメディエータとして使用しています。しかし、このファイルを実行すると、次のエラーが発生します。node.jsのリモートサーバーに当たって「ソケットがハングアップする」というエラーが発生しました

ソケット私は、このエラーについて確認していないsample.js

var qs = require('querystring'); 
var http = require('https'); 

var options = { 
    "method": "post", 
    "hostname": "xxx", 
    "port": null, 
    "path": "/xxx", 
    "headers": { 
    "authorization": "xxx", 
    "content-type": "application/x-www-form-urlencoded", 
    "cache-controller": "no-cache", 
    "postman-token": "xxx" 
    } 
}; 

var myToken = ""; 
var req = http.request(options, function(res) { 
    var chunks = []; 
    res.on("data", function(chunk) { 
    chunks.push(chunk); 
    }); 
    res.on("end", function() { 
    var body = Buffer.concat(chunks); 
    myToken = body.toString(); 
    req.write(qs.stringify({ 
     glba: 'otheruse', 
     dppa: 'none' 
    })); 
    req.end(); 
    }); 
}); 

私のコードをハングアップ、誰も私を助けて提案してくださいすることができますか?

答えて

0

リモートサーバーが自分のコントロールにあるかどうかを確認します。通常これは、サーバーがタイムリーな応答を送信しなかったときに発生し、ソケットが終了したばかりです。これがキャッチされ、再試行/キューイングなどが使用されると良いでしょう。

また、オプションのタイムアウトを増やしてみてください。サーバーが少し遅れて応答している可能性があります。このように -

var options = { ... } 
var req = http.request(options, function(res) { 
    // Usual stuff: on(data), on(end), chunks, etc... 
}); 

req.on('socket', function (socket) { 
    socket.setTimeout(myTimeout); 
    socket.on('timeout', function() { 
     req.abort(); 
    }); 
}); 

req.on('error', function(err) { 
    if (err.code === "ECONNRESET") { 
     console.log("Timeout occurs"); 
     //specific error treatment 
    } 
    //other error treatment 
}); 

req.write('something'); 
req.end(); 

希望します。

+0

こんにちはAky_0788、私は実際にこれについて新しいです。あなたはそれについて説明してもいいですか?オプションでタイムアウトを増やしてみてください。どうすればタイムアウトを増やすことができますか? – Niton

+0

これは....ですsetTimeout関数(){res.end()}、100); – Niton

+0

答えを編集しました –

関連する問題