Javascript Node.js:http请求在1分钟后超时

Javascript Node.js:http请求在1分钟后超时,javascript,node.js,express,connection-timeout,Javascript,Node.js,Express,Connection Timeout,我正在使用Node.js(版本0.10.28)向我的Ruby API发出http.request,以获取大量数据(来自PostgreSQL数据库的21000行)。问题是请求似乎超时,并在1分钟后返回404错误。我知道这是真的,因为Ruby API为请求返回61秒,我计算节点的请求需要多长时间(结果是60秒和404秒)。但是,如果我wget或使用jQuery的$.ajax超时4分钟,我可以得到21000行。所以很明显,它不可能是404,因为其他方法可以让数据工作 我也有点困惑,因为无论我在哪里查看

我正在使用Node.js(版本0.10.28)向我的Ruby API发出
http.request
,以获取大量数据(来自PostgreSQL数据库的21000行)。问题是请求似乎超时,并在1分钟后返回404错误。我知道这是真的,因为Ruby API为请求返回61秒,我计算节点的请求需要多长时间(结果是60秒和404秒)。但是,如果我
wget
或使用jQuery的
$.ajax
超时4分钟,我可以得到21000行。所以很明显,它不可能是404,因为其他方法可以让数据工作

我也有点困惑,因为无论我在哪里查看,http.request都不应该在2分钟后超时,根据:

我试过几种方法来让它工作,包括:设置;恢复请求;;并将超时设置为0,因此没有超时。不幸的是,这些方法都不起作用,或者至少从我的理解来看

为了清楚起见,这是我的代码。。。设置该限制意味着只返回18000条记录,这似乎是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);
API URL是有效的并且可以工作,正如我通过
wget
$.ajax
验证的那样,那么如何解决节点中的超时问题呢

更新


进一步检查后,如果我取出
socket.setTimeout(0)
并尝试进入
套接字.on('timeout'
,我实际上没有进入回调…这很奇怪,但在我得到404之前总是要60秒,这是一个nginx问题,因为我正在使用它来代理我的API,所以它只是通过设置
代理读取超时180s
来简单更改代理的配置,正如你所说的,这是nginx问题,但可能是y如果不在nginx配置中设置代理参数nginx默认值取决于操作系统,因为在Ubuntu 16.04中,我没有10分钟超时和任何代理参数的问题,但在centos和redhat中,我看到了1分钟超时限制

我添加了一个配置示例,因为除了proxy\u read\u timeout之外,还需要设置两个参数:

server {
    listen       80;
    server_name  myserver;

    location / {
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

        proxy_connect_timeout      180s;
        proxy_send_timeout         180s;
        proxy_read_timeout         180s;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}
对于该问题,重要参数包括:

proxy_connect_timeout      180s;
proxy_send_timeout         180s;
proxy_read_timeout         180s;

朋友在工作15天后出现了同样的问题,问题的来源是“server.headersTimeout=7200000您可以通过添加此代码来解决此问题

您是否尝试过使用Wireshark检查流量以确保节点没有收到响应?我会看看我能做些什么…我很久没有使用Wireshark了。另外,请注意,您链接的文档描述了节点的服务器超时。与请求超时是的,对不起,我尝试了太多的东西,以至于我在文档中丢失了…我尝试了
req.setTimeout(0);
但是没有骰子。我还以为我读过
http
基本上是
net
,它实现了
server
。进一步检查后,如果我取出
socket.setTimeout(0)
并尝试进入
套接字。在('timeout'
)时,我不…这很奇怪,但在我得到404之前总是60秒。你是一个救生员。实际上,默认的时间是60秒。在那之后,nginx将突然关闭请求,无论NodeJS是否完成处理。