我正在使用Node.js(版本0.10.28)对http.request
大量数据(来自PostgreSQL数据库的21,000行)建立我的Ruby API。问题在于请求似乎超时,并在1分钟后返回404错误。我知道这是对的,因为Ruby API为请求返回了61秒,我确定了节点的请求所花的时间(结果为60秒,返回404)。但是,如果我wget
或使用jQuery的$.ajax
超时时间为4分钟,则可以获得21,000行。显然,它不能是404,因为获取数据的其他方法可以正常工作。
我也有点困惑,因为我到处看,http.request
都不应该在两分钟后超时,根据:
我已经尝试了一些方法来使它起作用,包括:设置express的中间件;监听套接字超时并恢复请求;并将超时设置为0,因此没有超时。不幸的是,这些方法都没有起作用,或者至少从我的理解来看。
为了清楚起见,这是我的代码...设置该限制意味着仅返回18,000条记录,这似乎是API花费超过60秒的起点:
var http = require('http');
var options = {
path: '/api/records.json?limit=18000',
method: 'GET',
host: 'localhost',
requestCert: true,
rejectUnauthorized: false
};
var req = http.request(options, function(res) {
var endDate = new Date();
console.log('done', endDate - startDate);
var output = [];
res.on('data', function(chunk) {
output.push(chunk);
});
res.on('end', function() {
var data = output.join('');
console.log(data);
return {data: data, success: true};
});
});
req.on('socket', function(socket) {
socket.setTimeout(0); // no timeout
socket.on('timeout', function() {
socket.resume(); // tried resuming the timeout
});
});
req.end();
var startDate = new Date();
console.log('starting', startDate);
我已经通过wget
和验证了该API URL的有效性,并且可以正常工作,$.ajax
那么如何解决Node中的超时问题?
更新
经过进一步检查,如果我取出socket.setTimeout(0);
并尝试进入socket.on('timeout'
,实际上并没有进入回调……这很奇怪,但是总是在60秒钟后才能收到404
这是nginx的问题,因为我正在使用它来代理到我的API,因此通过设置,可以简单地更改代理的配置proxy_read_timeout 180s
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句