我正在使用 Node.js 中的请求模块来发出请求,并且正在流式传输收到的响应。该响应流通过管道传输到 csv 解析器并将记录填充到数组中。一旦获得预设的记录数,我想结束 csv 解析并关闭响应流。如何正确清理响应流。这是伪代码
var stream = request.get(url);
stream.pipe(csvParser);
var count = 15;
csvParser.on("readable",function(){
while(record = csvParser.read()){
if(records.length<count){
records.push(record);
} else {
csvParser.end();
//stream.close();
//stream.unpipe();
// stream.destroy();
}
}
});
csvParser.on("error",function(err){
console.log("Error",err.message);
})
csvParser.on("finish",function(){
//console.log("records",records);
console.log("done");
})
当我尝试stream.close()时,它说未定义的方法。正确的清理方法是什么?...
最佳答案
可读流没有close
方法。 close
方法是旧的 hack,仅关闭 fs
读取流(我不知道它是否仍然有效)
此外,可读流中没有方法destroy
。
恐怕没有方法可以在流结束之前结束流。
您可以停止从流中读取。在您的情况下,流在流动模式
下工作,因此调用该方法csvParser.read()
时,会请求下一部分数据。如果您停止调用 csvParser.read()
,则此事件 csvParser.on("readable",function(){
停止触发。
有一些很好的对话https://groups.google.com/forum/#!msg/nodejs/eGukJUQrOBY/URD8I7tNxRUJ关于类似的案例。
关于node.js - 在 NodeJS 结束之前关闭 Http 响应流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33411212/