0

我正在使用 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);

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

4

2 回答 2

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);

有关更多详细信息,请查看此处

于 2021-06-08T12:31:40.537 回答
0

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

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();
于 2021-06-08T12:29:58.543 回答