Node/expressサーバーを使用しています。 expressのデフォルトのタイムアウトは120,000ミリ秒ですが、私には十分ではありません。応答が120,000ミリ秒に達すると、コンソールはPOST /additem 200 120006ms
をログに記録し、ページにエラーが表示されるため、タイムアウトをより大きな値に設定します。どうすればいいですか?
質問にあるログを考えると、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/');
これを試して:
var options = {
url: 'http://url',
timeout: 120000
}
request(options, function(err, resp, body) {});
他のオプションについては、 request のドキュメントを参照してください。
特定のリクエストでは、timeOutを0に設定できます。これは、DBまたは他のサーバーから応答を受け取るまでタイムアウトになりません。
request.setTimeout(0)
bin/www
に設定がある場合は、httpサーバーの作成後にタイムアウトパラメーターを追加するだけです。
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces
*/
server.listen(port);
server.timeout=yourValueInMillisecond
最新の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);
};