2017-11-28 7 views
0

ノードJSリクエストモジュールには、レスポンスを受信するたびに発生するコールバックが含まれますが、サーバが応答しない場合はどうなりますか?要求モジュール:サーバーが応答しない場合はどうなりますか?

例で説明します。

私のコードは次のようになります。

request(TARGET_URL, function (error, response, body) { 
    if (response.statusCode == 200) doSomething() 
}) 

をので、再び:サーバはに応答しないたらどう? TARGET_URLサーバーが応答しない場合、プログラムの実行が停止するのを避けるにはどうすればよいですか?

答えて

0

この場合、コールバック関数はしばらくしても呼び出されますが、最初の引数は空ではありません。 the docを引用:

あり、タイムアウトには主に2つの種類があります:接続タイムアウトがと タイムアウトをお読みください。 クライアントがリモートマシン (ソケット上のconnect()呼び出しに対応)への接続を確立しようとしているときにタイムアウトが発生すると、接続タイムアウトが発生します。読み取りタイムアウト は、サーバーが遅すぎて 応答の一部を返送できない場合に発生します。

これらの2つの状況は、 に間違ったものがあったために、大きく異なる意味を持ちます。したがって、それらを区別できると便利です。 err.code'ETIMEDOUT' の値にチェックすると、タイムアウトエラーを検出できます。さらに、err.connectプロパティがtrueに設定されているかどうかをチェックすることによって、タイムアウトが接続 タイムアウトであったかどうかを検出できます。

request.get('http://10.255.255.1', {timeout: 1500}, function(err) { 
    console.log(err.code === 'ETIMEDOUT'); 
    // Set to `true` if the timeout was a connection timeout, `false` or 
    // `undefined` otherwise. 
    console.log(err.connect === true); 
    process.exit(0); 
}); 

{ timeout : 1500 }一部がこのアプローチを使用すると、処理されるべき特定の要求のための特定の時刻を設定することができます。

関連する問題