我有我正在使用的 ExpressJS 代码。我的应用程序发送了一个 _id 的数组,我从 mongo 中搜索和抓取。然后我试图生成返回数据的 CSV 文件。下面的代码按预期工作。它正在将 CSV 写入我的应用程序的根目录。我想要做的修改是我希望文件下载到用户机器上。我在谷歌上搜索这个话题已经有一段时间了,每个人都说为了下载文件,你需要使用 fs.createWriteStreamres.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/

10-09 21:46