我有我正在使用的 ExpressJS 代码。我的应用程序发送了一个 _id 的数组,我从 mongo 中搜索和抓取。然后我试图生成返回数据的 CSV 文件。下面的代码按预期工作。它正在将 CSV 写入我的应用程序的根目录。我想要做的修改是我希望文件下载到用户机器上。我在谷歌上搜索这个话题已经有一段时间了,每个人都说为了下载文件,你需要使用 fs.createWriteStream
或 res.download()
但是我不知道如何用我当前的方法结构来实现它。显然,它需要在创建 csv 后发生在 json2csv()
中。我宁愿不必写入文件,流,然后删除。如果我可以流式传输,我会喜欢它。
我使用的 json2csv 包在这里:
https://www.npmjs.com/package/json2csv
router.post('/Equipment/Report', function(req, res, next) {
var filteredData = req.body;
console.log(filteredData);
Equipment.find({_id: { $in: filteredData }}, function(err, Equipment) {
console.log(Equipment);
var fields = ['ClassPrefix', 'UnitNumber'];
json2csv({ data: Equipment, fields: fields}, function(err, csv) {
if (err) console.log(err);
fs.writeFile('file.csv', csv, function(err) {
if (err) throw err;
console.log('file saved');
});
});
});
//console.log(filteredData);
});
编辑建议的代码 -
router.post('/Equipment/Report', function(req, res, next) {
var filteredData = req.body;
console.log(filteredData);
Equipment.find({_id: { $in: filteredData }}, function(err, Equipment) {
console.log(Equipment);
var fields = ['ClassPrefix', 'UnitNumber'];
json2csv({ data: Equipment, fields: fields}, function(err, csv) {
if (err) console.log(err);
console.log(csv);
res.attachment('data.csv');
res.send(csv);
});
});
});
这不会下载任何文件。
记录 200 的响应。
最佳答案
您可以使用以下代码片段代替 writeFile
res.attachment('file.csv');
res.send(csv)
关于node.js - ExpressJS JSON 转 CSV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32234926/