如何使用csv-writer不写入文件系统直接获取CSV内容
无需写入文件直接从数组生成CSV可读流
你可以通过两种方式实现,不需要把CSV内容写入本地文件,直接从数组生成可读流:
方法1:利用csv-writer结合内存流
csv-writer支持将内容写入任意可写流,而非仅文件。用Node.js内置的stream.PassThrough创建一个内存流,让csv-writer写入该流,同时这个流就能作为可读流使用:
const { createObjectCsvWriter } = require('csv-writer'); const { PassThrough } = require('stream'); // 创建内存中转流 const passThroughStream = new PassThrough(); const csvWriter = createObjectCsvWriter({ path: passThroughStream, // 把内存流作为输出目标,替换原文件路径 header: [ 'field1', 'field2', 'field3', 'field4', 'field5', 'field6', 'field7', 'field8', 'field9', 'field10', 'field11', 'field12', 'field13', 'field14', 'field15', 'field16', 'field17', 'field18', 'field19', 'field20', 'field21', 'field22', 'field23', 'field24', 'field25', 'field26', 'field27', 'field28', 'field29', 'field30', 'field31', 'field32', 'field33', 'field34', 'field35', 'field36', 'field37', 'field38', 'field39', 'field40', 'field41', 'field42', 'field43', 'field44' ], encoding: 'utf8', append: false, }); // 写入数组数据到内存流 await csvWriter.writeRecords(records); // 标记流结束,避免下游一直等待数据 passThroughStream.end(); // 此时passThroughStream就是你需要的CSV可读流 inputFile = passThroughStream;
方法2:用csv-stringify直接生成CSV流
如果不需要csv-writer的对象映射特性,同生态的csv-stringify更适合直接生成CSV流,步骤更简洁:
先安装依赖:
npm install csv-stringify
代码示例:
const { stringify } = require('csv-stringify'); const { Readable } = require('stream'); // 将数组转为可读流,再通过csv-stringify转换为CSV格式流 const inputFile = Readable.from(records) .pipe(stringify({ header: true, // 控制是否输出表头 columns: [ 'field1', 'field2', 'field3', 'field4', 'field5', 'field6', 'field7', 'field8', 'field9', 'field10', 'field11', 'field12', 'field13', 'field14', 'field15', 'field16', 'field17', 'field18', 'field19', 'field20', 'field21', 'field22', 'field23', 'field24', 'field25', 'field26', 'field27', 'field28', 'field29', 'field30', 'field31', 'field32', 'field33', 'field34', 'field35', 'field36', 'field37', 'field38', 'field39', 'field40', 'field41', 'field42', 'field43', 'field44' ] // 定义表头与数组对象字段的对应关系 }));
两种方案都能完全绕开本地文件写入,直接在内存中生成符合要求的CSV可读流,按需选择即可。
内容的提问来源于stack exchange,提问作者thiên nguyên văn
相关产品推荐
相关产品推荐

