Напишите CSV в Node.js

Я изо всех сил пытаюсь найти способ записи данных в CSV в Node.js.

Доступно несколько плагинов CSV, однако они "пишут" только на стандартный вывод.

В идеале я хочу писать построчно, используя цикл.

Ответы

Ответ 1

В документах node-csv-parser (npm install csv) указано, что их можно использовать с потоками (см. fromStream, toStream). Поэтому он не жестко закодирован для использования stdout.

Несколько других парсеров CSV также появляются, когда вы npm search csv - вы также можете посмотреть на них.

Ответ 2

Вы можете использовать fs (https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback):

var dataToWrite;
var fs = require('fs');

fs.writeFile('form-tracking/formList.csv', dataToWrite, 'utf8', function (err) {
  if (err) {
    console.log('Some error occured - file either not saved or corrupted file saved.');
  } else{
    console.log('It\ saved!');
  }
});

Ответ 3

Вот простой пример использования csv-stringify для записи набора данных, который помещается в память в файл csv с использованием fs.writeFile.

import stringify from 'csv-stringify';
import fs from 'fs';

let data = [];
let columns = {
  id: 'id',
  name: 'Name'
};

for (var i = 0; i < 10; i++) {
  data.push([i, 'Name ' + i]);
}

stringify(data, { header: true, columns: columns }, (err, output) => {
  if (err) throw err;
  fs.writeFile('my.csv', output, (err) => {
    if (err) throw err;
    console.log('my.csv saved.');
  });
});

Ответ 4

Если вы хотите использовать цикл, как вы говорите, вы можете сделать что-то подобное с Node fs:

let fs = require("fs")

let writeStream = fs.createWriteStream('/path/filename.csv')

someArrayOfObjects.forEach((someObject, index) => {     
    let newLine = []
    newLine.push(someObject.stringPropertyOne)
    newLine.push(someObject.stringPropertyTwo)
    ....

    writeStream.write(newLine.join(',')+ '\n', () => {
        // a line was written to stream
    })
})

writeStream.end()

writeStream.on('finish', () => {
    console.log('finish write stream, moving along')
}).on('error', (err) => {
    console.log(err)
})