Nodejs + expressjs在服务器超时后重播请求
Posted
技术标签:
【中文标题】Nodejs + expressjs在服务器超时后重播请求【英文标题】:Nodejs + expressjs replays request after server timeout 【发布时间】:2012-10-14 10:43:57 【问题描述】:我正在尝试通过app.get("/importdata" , callback)
在 node + express 应用程序中导入大量数据。在超时并且如果请求未完成,它会再次重播请求,并且我的服务器再次开始导入相同的数据。
我无法找到连接超时后重放请求的确切原因?
如果我将超时时间设置为一个很大的数字,部分问题会得到解决,但我不明白为什么再次播放请求?
非常感谢。
来自我的 server.js 的片段
app.get('/impdata', function(req, res)
req.connection.setTimeout(600000);
console.log("impstore--------------->");
Q.when( getData(req.data), function(resp)
res.json(resp);
); );
来自我的控制台的片段
impstore--------------->
userid
time stamp Wed Oct 24 2012 16:35:28 GMT+0530 (IST)
Listings got 100
userid
ims 1
time stamp recursive
Listings got 200
userid
ims 1
time stamp recursive
Listings got 300
userid
ims 1
time stamp recursive
Listings got 400
userid
ims 1
time stamp recursive
Listings got 500
userid
ims 1
time stamp recursive
Listings got 600
userid
ims 1
time stamp recursive
Listings got 700
userid
ims 1
time stamp recursive
Listings got 800
userid
ims 1
time stamp recursive
Listings got 900
userid
ims 1
time stamp recursive
impstore--------------->
userid
time stamp Wed Oct 24 2012 16:37:28 GMT+0530 (IST)
Listings got 1000
userid
ims 1
time stamp recursive
Listings got 100
userid
ims 1
有关信息:我正在获取 100 个块的数据 我收到 900 个数据列表,然后服务器超时,但正如我们在控制台上看到的,再次发出请求检查最后 2 组,第一个显示下一个 100 即列表现在增加到 1000,第二个说列表是 100当整个过程完成时,U有2个相似的对象。
希望我解释得很好。
【问题讨论】:
你需要展示一些代码(最好是最小的测试用例)。 你需要展示一些代码(最好是最小的测试用例)。 你确定不是客户端重新发送的吗? 我已经编辑了代码以供参考。 【参考方案1】:我也有同样的问题。我在堆栈溢出中看到了另一个答案,它解释了根据 HTTP 协议规范,http 客户端可以在超时后重新发送请求。对于 express,默认服务器超时为 2 分钟 (https://nodejs.org/api/all.html#http_server_settimeout_msecs_callback)。
如果您从浏览器访问该端点,这可能就是您的情况。
而且我理解这很奇怪,看起来像鬼正在向你重新发送相同的请求。其他人一遍又一遍地要求您仔细检查是否不是客户端重新发送请求。
如果我找到其他答案可以更好地解释这种幽灵行为,我会更新这个答案。
【讨论】:
向上,你找到为什么你有这个错误了吗?以上是关于Nodejs + expressjs在服务器超时后重播请求的主要内容,如果未能解决你的问题,请参考以下文章
如何诊断/调试 nodejs/expressjs 的 500 内部服务器错误?
Nodejs:无法同时运行expressjs和reactjs
使用 nodejs 和 expressjs 的 flash 套接字策略
异步和递归目录扫描,用于 Nodejs 和 Expressjs 中的文件列表