web-dev-qa-db-ja.com

NPM要求モジュール(RESTクライアント)のデフォルトのタイムアウトは何ですか?

以下は、データを取得するためのnode.js呼び出しです。これには1分以上かかります。ここでは、1分(60秒)でタイムアウトになります。待機時間のコンソールログも配置しました。ただし、120秒のタイムアウトを設定しましたが、反映されません。デフォルトレベルのnodejsサーバーのタイムアウトが120秒であることはわかっていますが、この request モジュールからこの呼び出しのタイムアウト(60秒)を取得しています。これについてあなたの洞察を提供してください。

var options = {
  method: 'post',
  url:url,
  timeout: 120000,
  json: true,
  headers: {
    "Content-Type": "application/json",
    "X-Authorization": "abc",
    "Accept-Encoding":"gzip"
  }
}
var startTime = new Date();
request(options, function(e, r, body) {
  var endTime = new Date();
  var latencyTime = endTime - startTime;
  console.log("Ended. latencyTime:"+latencyTime/1000);
  res.status(200).send(body);

});
13

request options docs から、timeoutエントリまでスクロールします。

timeout-リクエストを中止する前に、サーバーが応答ヘッダーを送信する(および応答本文を開始する)のを待機するミリ秒数を含む整数。基礎となるTCP接続を確立できない場合、OS全体のTCP接続タイムアウトにより、タイムアウトオプションが無効になります(Linuxのデフォルトは、 20〜120秒)。

最後の部分に注意してください。「基になるTCP接続を確立できない場合、OS全体のTCP接続タイムアウトはタイムアウトオプションを無効にします。 ".

Timeouts に関するセクション全体もあります。それとあなたのコードサンプルに基づいて、リクエストサンプルをそのように変更できます

request(options, function(e, r, body) {
  if (e.code === 'ETIMEDOUT' && e.connect === true){
  // when there's a timeout and connect is true, we're meeting the
  // conditions described for the timeout option where the OS governs
  console.log('bummer');
  }
});

これが当てはまる場合は、OS設定の変更が可能で許容できるかどうかを判断する必要があります(これはこの回答の範囲外であり、そのような質問はServer Faultの方が適切です)。

9