【问题标题】:Download large csv file using json2csv in node js在节点 js 中使用 json2csv 下载大型 csv 文件
【发布时间】:2021-06-08 12:24:25
【问题描述】:

我正在使用 json2csv 包下载我的数据,它适用于小数据。但如果记录超过 300 个值,它就会崩溃。这是我的代码

const csvString = json2csv.parse(responseData);
    res.setHeader('Content-disposition', 'attachment; filename=shifts-report.csv');
    res.set('Content-Type', 'text/csv');
    res.status(200).send(csvString);

这段代码在小数据上工作得非常好,当有大量数据时,我如何使用我遵循的相同方法流式传输数据。

【问题讨论】:

  • 请提供一些示例数据及其预期输出。可能会根据正在解析的数据进行优化。
  • 这是我要下载的虚拟数据格式。数据正在完美下载我正在尝试使用我在方法下方发布的逐块下载它。 responseData = [ {“汽车”:“奥迪”,“价格”:40000,“颜色”:“蓝色”},{“汽车”:“宝马”,“价格”:35000,“颜色”:“黑色”} , { "car": "Porsche", "price": 60000, "color": "green" } ];

标签: node.js express json2csv


【解决方案1】:

您应该改用Json2CSV stream

npm install json2csv-stream
const fs = require('fs');
const MyStream = require('json2csv-stream');


// create the one-time-use transform stream
const parser = new MyStream();

// create the read and write streams
const reader = fs.createReadStream('data.json');
const writer = fs.createWriteStream('out.csv');

//You can use writer to write it to the FS
// or can stream the content to the response object
// however, you need to write this code in any route handler
// which is sending the CSV data back to the user
reader.pipe(parser).pipe(res);

//reader.pipe(parser).pipe(writer);

更多详情请查看here

【讨论】:

  • 仅供参考:你已经初始化了writer,但你没有使用它。
  • 这个包也被弃用了,因为OP的包有一个流接口。
  • 好的,我会使用 json2csv-stream 包检查
  • @samthecodingman 是的,如果他想将其存储在 FS 上,我只是将其留作参考,并用信息更新了答案。
【解决方案2】:

我正在尝试这样的事情,但它给了我一个无法设置标题的错误。

const headers = {
      'Content-type': 'text/csv',
      'Transfer-Encoding': 'chunked',
      'Content-Disposition': 'attachment; filename="file.csv"'
    };
    res.writeHead(200, headers);
    res.flushHeaders();
    const stream = new Writable({
      write(chunk, encoding, callback) {
        res.write(chunk);
        callback();
      }
    });
try {
        stream.write(file, 'utf-8');
      } catch (error) {
        console.log('error', error);
      }
    }
    res.end();

【讨论】:

  • 我无法找到我做错的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 2015-03-03
相关资源
最近更新 更多