请求在ExpressJS上提前结束

时间:2017-06-20 02:15:50

标签: node.js express curl

router.route('...')
.get(function(req, res, next) {
  // This job() function doing some *long* async task and end of the task calling 3th param as callback     
  job(param1, param2, function(response) {
    // printing response to console perfectly
    console.log("callback fired", response);
    res.send("response");
  }); 
});

我正在使用curl提出请求。

$ curl ... -m 300
curl: (52) Empty reply from server

cURL正在等待几分钟的响应,然后我收到空回复错误。 cURL在 nodejs打印回调触发消息之前发出此错误

如果我使用浏览器或邮递员发出此请求,则会出现同样的错误。

我确定res.send()异步功能中没有res.end()job()个函数。我卡住了,我怎么跟踪并发现错误?

1 个答案:

答案 0 :(得分:1)

有两种可能的超时可能会影响您。如果没有看到实际的网络跟踪(看看请求结束时会发生什么),我无法确定哪个超时可能导致您的问题。但是,你可以解决它们,它应该处理你的问题。

首先,curl具有超时值。目前还不清楚它的默认设置是什么,但你可以设置你想要的任何值:

curl --max-time 900

其中值以秒为单位。

其次,nodejs http服务器有一个超时,如果没有响应发送到一个打开的请求,它将关闭套接字(这会使死套点不能随着时间的推移而建立)。您可以查看server.setTimeout() here的文档。 http服务器对象的默认值为2分钟(我不知道Express是否会更改)。

一般的想法是:

 server.setTimeout(10 * 60 * 1000);   // set response timeout to 10 minutes

其中server对象将是您的http服务器对象(而不是Express app对象)。