Node.js 在客户端连接关闭时中止ReadStream
我正在尝试发送一个(巨大)文件,该文件每秒通过的数据量有限(使用): 如果我在客户端浏览器取消下载,流将继续,直到完全传输。Node.js 在客户端连接关闭时中止ReadStream,node.js,stream,Node.js,Stream,我正在尝试发送一个(巨大)文件,该文件每秒通过的数据量有限(使用): 如果我在客户端浏览器取消下载,流将继续,直到完全传输。 我还用测试了上面的场景,同样的行为 如果浏览器关闭了请求,如何取消流? 编辑: 我可以通过使用获取连接close事件 req.connection.on('close',function(){}); 但是流既没有销毁,也没有结束或停止属性,我可以使用这些属性停止流的进一步读取 我确实提供了属性pause,但我宁愿停止节点读取整个文件,而不是停止接收内容(如文档中所述)
我还用测试了上面的场景,同样的行为 如果浏览器关闭了请求,如何取消流?
编辑: 我可以通过使用获取连接
close
事件
req.connection.on('close',function(){});
但是流
既没有销毁
,也没有结束
或停止
属性,我可以使用这些属性停止流
的进一步读取
我确实提供了属性
pause
,但我宁愿停止节点读取整个文件,而不是停止接收内容(如文档中所述)。我最终使用了以下肮脏的解决方法:
var aborted = false;
stream.on('data', function(chunk){
if(aborted) return res.end();
// stream contents
});
req.connection.on('close',function(){
aborted = true;
res.end();
});
如上所述,这不是一个很好的解决方案,但它很有效。任何其他解决方案将不胜感激 我有同样的问题。你找到解决方案了吗?@user949300我已经为我的解决方案添加了一个答案,也许原力与你同在:)在我的情况下,这有点不同(不涉及浏览器,我只想读取文件的一部分)一个
stream.destroy()
似乎阻止可读流继续发出事件(而不是“关闭”)。
var aborted = false;
stream.on('data', function(chunk){
if(aborted) return res.end();
// stream contents
});
req.connection.on('close',function(){
aborted = true;
res.end();
});