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()
个函数。我卡住了,我怎么跟踪并发现错误?
答案 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
对象)。