如何修改nodejs请求默认超时时间?

时间:2014-05-29 03:33:07

标签: node.js express request timeout

我正在使用Node / express服务器。 Express的默认超时是120,000 ms,但对我来说还不够。当我的响应达到120,000毫秒时,控制台将记录POST /additem 200 120006ms并且页面显示错误,因此我想将超时设置为更大的值。我该怎么做?

6 个答案:

答案 0 :(得分:77)

我假设您使用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/');

答案 1 :(得分:36)

试试这个:

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

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

有关其他选项,请参阅request的文档。

答案 2 :(得分:9)

对于特定请求,我们可以将timeOut设置为0,直到我们从DB或其他服务器获得回复之前没有超时

request.setTimeout(0)

答案 3 :(得分:4)

对于那些在bin/www中配置的人,只需在http服务器创建后添加timeout参数。

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

答案 4 :(得分:0)

使用最新的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);
};

答案 5 :(得分:0)

Linking to express issue #3330

您可以全局设置整个服务器的超时时间:

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

或仅用于特定路线:

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