Подтвердить что ты не робот

Как изменить время ожидания тайм-аута запроса nodejs?

Я использую сервер Node/express. Тайм-аут по умолчанию экспресс составляет 120 000 мс, но для меня этого недостаточно. Когда мой ответ достигнет 120 000 мс, консоль войдет в журнал POST /additem 200 120006ms, и на странице появится сообщение об ошибке, поэтому я хочу установить тайм-аут на большее значение. Как мне это сделать?

4b9b3361

Ответ 1

Я предполагаю, что вы используете express, учитывая журналы, которые у вас есть в вашем вопросе. Ключ должен установить свойство timeout на сервере (следующее устанавливает тайм-аут на одну секунду, используйте любое значение, которое вы хотите):

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

Если вы не используете экспресс и работаете только с ванилью node, принцип тот же. Следующие данные не возвращаются:

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/');

Ответ 2

Попробуйте следующее:

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

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

Обратитесь к документации request для других параметров.

Ответ 3

Для конкретного запроса можно установить timeOut в 0, который не является таймаутом, пока мы не получим ответ от БД или другого сервера

request.setTimeout(0)

Ответ 4

Для тех, кто имеет конфигурацию в bin/www, просто добавьте параметр таймаута после создания http-сервера.

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

Ответ 5

С последним 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);
};

Ответ 6

Ссылка для экспресс-выпуска № 3330

Вы можете установить глобальное время ожидания для всего сервера:

var server = app.listen();
server.setTimeout(500000);

или только для определенного маршрута:

app.post('/xxx', function (req, res) {
   req.setTimeout(500000);
});