Как изменить время ожидания запроса по умолчанию для nodejs?
Я использую Node/ экспресс-сервер. Время ожидания экспресса по умолчанию составляет 120000 мс, но для меня этого недостаточно. Когда мой ответ достигнет 120000 мс, консоль войдет в систему POST /additem 200 120006ms
и страница показывает ошибку, поэтому я хочу установить таймаут на большее значение. Как бы я это сделал?
4 ответа
Я предполагаю, что вы используете express
с учетом логов у вас есть в вашем вопросе. Ключ должен установить timeout
свойство на сервере (следующее устанавливает время ожидания в одну секунду, используйте любое значение, которое вы хотите):
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
});
server.timeout = 1000;
Если вы не используете экспресс и работаете только с ванильным узлом, принцип тот же. Следующее не вернет данные:
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) {});
Обратитесь к документации запроса для других вариантов.
Ссылка на экспресс-выпуск № 3330
Вы можете установить тайм-аут глобально для всего сервера:
var server = app.listen();
server.setTimeout(500000);
или только для конкретного маршрута:
app.post('/xxx', function (req, res) {
req.setTimeout(500000);
});
Для конкретного запроса можно установить timeOut в 0, который не является тайм-аутом, пока мы не получим ответ от БД или другого сервера.
request.setTimeout(0)
Для тех, кто имеет конфигурацию в bin/www
Просто добавьте параметр timeout после создания 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);
};