How to read csv file in node js

58,884

Solution 1

Use a library, CSV has lots of gotchas. I have come to enjoy the package csv. It is located here: https://www.npmjs.com/package/csv . Here is a very quick example using the async api.

const fs = require('fs')
var parse = require('csv-parse')
fs.readFile(inputPath, function (err, fileData) {
  parse(fileData, {columns: false, trim: true}, function(err, rows) {
    // Your CSV data is in an array of arrys passed to this callback as rows.
  })
})

Since your file does not have multiple values per row and contains no delimiters besides newline, it is only trivially CSV. Maybe String.prototype.split() is for you?

const fs = require('fs')
fs.readFile(inputPath, 'utf8', function (err, data) {
  var dataArray = data.split(/\r?\n/);  //Be careful if you are in a \r\n world...
  // Your array contains ['ID', 'D11', ... ]
})

Solution 2

I used a stream, fs, and csv-parse like in this answer:

const parse = require('csv-parse')
const fs = require('fs') 

const data = []
fs.createReadStream(filename)
  .pipe(parse({ delimiter: ',' }))
  .on('data', (r) => {
    console.log(r);
    data.push(r);        
  })
  .on('end', () => {
    console.log(data);
  })
Share:
58,884
MMR
Author by

MMR

ASK LEARN THEN ANSWER THEN BECOME EXPERT

Updated on July 09, 2022

Comments

  • MMR
    MMR almost 2 years

    I am trying to read a csv file using node js. Her is my code

    fs.readFile(config.csvUploadPath, function read(err, data) {
        if (err) {
            throw err;
        }
        console.log(data + 'my data')
    });
    

    CONSOLE:

    ID
    D11
    D33
    D55
    

    Here I want to get the elements in the column ID and store those in an array. How can I do that? Can anyone suggest me help. Thanks. My controller:

    var partnersModel = new partners(params);
            fs.readFile(config.csvUploadPath, function read(err, data) {
                if (err) {
                    throw err;
                }
            dataArray = data.toString().split(/\r?\n/);
                dataArray.forEach(function(v,i){
                    if(v !== 'DUI'){
                      partnersModel.dui.push(v);
                    }
                });
            });
            partnersModel.save(function(error, response){