【发布时间】:2014-08-19 17:02:18
【问题描述】:
将 http 请求的响应通过管道传输到文件非常简单:
http.get(url, function (res) {
var file = fs.createWriteStream(filename)
res.pipe(file)
file.on('finish', function () {
file.close()
})
})
但是当我尝试设置重试系统时,事情变得复杂了。我可以根据res.statusCode 决定是否重试,但是如果我决定重试,这意味着不将响应传送到可写流,因此响应保持打开状态。当我进行多次重试时,这会大大减慢执行速度。对此的解决方案是(无用地)收听data 和end 事件只是为了让响应关闭,但是如果我决定不重试,我不能再通过管道传输到 writeStream,因为响应是现已关闭。
无论如何,我肯定不是唯一一个想要将 http 请求的响应流式传输到文件的人,当我收到 503 时重试,但我似乎找不到任何“外面”的代码可以做到这一点.
【问题讨论】:
-
我对你想要的行为有点不清楚。我看到的是:如果响应不是 503,请流式传输。如果是 503,请重试。如果重试成功,则流式传输该回复。到目前为止,一切都很好。但是听起来在某些情况下您可能会开始重试,但后来决定您毕竟想要原始响应。那是什么情况?
-
不完全是,看我的回答
标签: javascript node.js http stream