Roh*_*hit 5 csv node.js export-to-csv
mongodb集合中有20,000条记录.我在csv中导出所有这些记录.我使用这个发送部分响应:
res.writeHead(200, {
"Content-Type": "application/csv",
"Content-disposition": "attachment; filename='import.csv'"
});
res.write(data + '0', "binary");
Run Code Online (Sandbox Code Playgroud)
上面的代码以500的批量执行.我在处理所有记录时使用此代码结束.
if (++responseCount == loopCount) {
res.end();
}
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误:
发送后无法设置标头.
但我得到的文件下载了500条记录.
这是我的完整代码.
var exportData = function (req, res, next) {
var limit = 500;
var responseCount = 0;
var loopCount = 1;
var size = 30000;
//Get 500 records at one time
var getData = function (req, start, cb) {
req.db.collection('items').find().skip(start).limit(limit).toArray(function (err, records) {
if (err) throw err;
cb(null, records);
});
};
if (size > limit) {
loopCount = parseInt(req.size / limit);
if ((req.size % limit) != 0) {
loopCount += 1;
}
}
for (var j = 0; j < loopCount; j++) {
getData(req, limit * j, function (err, records) {
if (err) throw err;
records.forEach(function (record) {
//Process record one by one
});
res.write(records);
if (++responseCount == loopCount) {
res.setHeader('Content-type', 'application/csv');
res.setHeader("Content-disposition", 'attachment; filename="import.csv"');
res.end();
}
});
}
};
Run Code Online (Sandbox Code Playgroud)
这个说法
res.writeHead(200, {
"Content-Type": "application/csv",
"Content-disposition": "attachment; filename='import.csv'"
});
Run Code Online (Sandbox Code Playgroud)
当您响应发送时属于标头部分。因此,它发送标头。
res.end()也发送标头。因此,通过这种方式您再次发送标头。
请参考这个stackoverlflow 问题
编辑代码:
data.pipe(resp);
resp.end();
Run Code Online (Sandbox Code Playgroud)
更多管道请参考此
| 归档时间: |
|
| 查看次数: |
4314 次 |
| 最近记录: |