【发布时间】:2015-10-30 23:50:22
【问题描述】:
我在尝试将流与 MongoDB 请求一起使用时遇到了一些麻烦。我想:
- 从集合中获取结果
- 将此结果放入文件中
- 将此文件放入 CSV 文件中
我使用archiver package 进行文件压缩。该文件包含 csv 格式的值,因此对于每一行,我必须以 CSV 格式解析它们。
我的函数带有一个 res(输出)参数,这意味着我可以直接将结果发送给客户端。目前,我可以将此结果放入没有流的文件中。我想我会遇到大量数据的内存问题,这就是我想使用流的原因。
这是我的代码(没有流)
function getCSV(res,query) {
<dbRequest>.toArray(function(err,docs){
var csv = '';
if(docs !== null){
for(var i = 0; i< docs.length; i++){
var line = '';
for(var index in docs[i]){
if(docs[i].hasOwnProperty(index) && (index !== '_id' ) ){
if(line !== '') line+= ',';
line += docs[i][index];
}
}
console.log("line",line);
csv += line += '\r\n';
}
}
}.bind(this));
fileManager.addToFile(csv);
archiver.initialize();
archiver.addToArchive(fileManager.getName());
fileManager.deleteFile();
archiver.sendToClient(res);
};
完成 csv 后,我将其保存到带有 Filemanager 对象的文件中。后者处理文件创建和操作。 addToArchive 方法将文件添加到当前存档中,sendToClient 方法通过输出发送存档(res 参数为函数)。
我正在使用 Express.js,所以我通过服务器请求调用此方法。
有时文件包含数据,有时它是空的,你能解释一下为什么吗? 我想了解流的工作原理,如何在我的代码中实现它?
问候
【问题讨论】: