在NodeJS结束之前关闭Http响应流

时间:2015-10-29 10:05:53

标签: node.js http csv stream

我正在使用nodejs中的请求模块发出请求,而我正在进行流式响应。此响应流通过管道传递给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()时,它说的是未定义的方法。什么是正确的清理方式..?

1 个答案:

答案 0 :(得分:2)

可读流没有close方法。 close方法很老,只能关闭fs读取流(我不知道它是否仍在工作)

此外,可读流中没有方法destroy

我担心在结束之前没有方法可以结束流。

您可以停止从流中读取。在您的案例流工作flowing mode中,因此调用此方法时csvParser.read()是对下一部分数据的请求。如果您停止调用csvParser.read(),则此事件csvParser.on("readable",function(){将停止触发。

关于类似案例,有一些很好的对话https://groups.google.com/forum/#!msg/nodejs/eGukJUQrOBY/URD8I7tNxRUJ