web-dev-qa-db-ja.com

nodejsリクエストのデフォルトのタイムアウト時間を変更するにはどうすればよいですか?

Node/expressサーバーを使用しています。 expressのデフォルトのタイムアウトは120,000ミリ秒ですが、私には十分ではありません。応答が120,000ミリ秒に達すると、コンソールはPOST /additem 200 120006msをログに記録し、ページにエラーが表示されるため、タイムアウトをより大きな値に設定します。どうすればいいですか?

59
MarsOnly

質問にあるログを考えると、expressを使用していると思います。重要なのは、サーバーのtimeoutプロパティを設定することです(以下では、タイムアウトを1秒に設定し、必要な値を使用します)。

var server = app.listen(app.get('port'), function() {
  debug('Express server listening on port ' + server.address().port);
});
server.timeout = 1000;

Expressを使用せず、Vanillaノードのみを使用している場合、原則は同じです。以下はデータを返しません。

var http = require('http');
var server = http.createServer(function (req, res) {
  setTimeout(function() {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
  }, 200);
}).listen(1337, '127.0.0.1');

server.timeout = 20;
console.log('Server running at http://127.0.0.1:1337/');
84
SomeKittens

これを試して:

var options = {
    url:  'http://url',
    timeout: 120000
}

request(options, function(err, resp, body) {});

他のオプションについては、 request のドキュメントを参照してください。

37
Lee

特定のリクエストでは、timeOutを0に設定できます。これは、DBまたは他のサーバーから応答を受け取るまでタイムアウトになりません。

request.setTimeout(0)
9
Bhavik

bin/wwwに設定がある場合は、httpサーバーの作成後にタイムアウトパラメーターを追加するだけです。

var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces
*/
server.listen(port);
server.timeout=yourValueInMillisecond
4
Rohith K D

最新のNodeJSを使用すると、このモンキーパッチを試すことができます。

const http = require("http");
const originalOnSocket = http.ClientRequest.prototype.onSocket;
require("http").ClientRequest.prototype.onSocket = function(socket) {
    const that = this;
    socket.setTimeout(this.timeout ? this.timeout : 3000);
    socket.on('timeout', function() {
        that.abort();
    });
    originalOnSocket.call(this, socket);
};
0
Bela Vizy