JS & ES snippet

Setup the global node modules

  • Add an environment variable to tell node where the global node module sits
# I use nvm to manage my node and node modules
export NODE_PATH=${HOME}/.nvm/versions/node/<node_version>/lib/node_modules
  • If you use npm by default, you may have permission problem to access the node modules. I suggest you to set a customized global node module folder under your home directory.

    • Create a new folder under your home directory
    • Install npm to new global node module
    • update environment variables in the profile
    mkdir $HOME/.node_modules
    npm config set prefix $HOME/.node_modules
    npm install -g npm
    echo 'export NODE_MODULES=$HOME/.node_modules' >> $HOME/.profile
    echo 'export PATH=$PATH:$NODE_MODULES/bin' >> $HOME/.profile
    source $HOME/.profile
    

Parsing CSV file

Parse csv file with fast-csv

  • Install package fast-csv globally

    npm install -g fast-csv

  • Assume there is a csv file named test.csv, which contains a few contacts

Sample 1
const fs = require("fs")
const csv = require('fast-csv');

fs.createReadStream('test.csv')
    .pipe(csv.parse({headers:true}))
    .on('error', error => console.error(error))
    .on('data', row => console.log(`ROW=${JSON.stringify(row)}`))
    .on('end', rowCount => console.log(`Parsed ${rowCount} rows`));


Sample 2
  • Validate empty field
const csv = require('fast-csv')
const fs = require('fs')
const fileStream = fs.createReadStream('test.csv')
const parser = csv.parse({ ignoreEmpty: true, headers: true, trim: true })

const invalidFilter

fileStream
  .pipe(parser)
  .validate(data => data.last_name && data.mobile.startsWith('04'))
  .on('error', error => console.error(error))
  .on('data', row => console.log(`Valid [row=${JSON.stringify(row)}]`))
  .on('data-invalid', (row, rowNumber) => console.log(`Invalid [rowNumber=${rowNumber}] [row=${JSON.stringify(row)}]`))
  .on('end', rowCount => console.log(`Parsed ${rowCount} rows`))