Skip to content

iantocristian/csv-transform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

csv-transform - Node.js module

A CSV transform stream

Transforms a data/object stream (e.g. a mongodb cursor stream) into a csv stream. The data stream should have data/error/close events, and support for pause/resume.

Usage

var CSVTransform = require('csv-transform');

// ...................................

// obtain a mongodb cursor for data
// ...................................

var stream = cursor.stream()

var csvTransform = new CSVTransform(
  stream, // input data stream
  {
    encoding: 'utf8', // encoding defaults to utf8
    delimiter: ',', // delimiter defaults to comma
    endLine: '\n', // new line separator defaults to '\n',
    headerRow: true,
    asyncWrite: false, // enable asynchronous transform/formatting, defaults to false
    fieldMap: [
      { fieldName: 'id', columnTitle: 'Id'  },
      { fieldName: 'surname', columnTitle: 'Surname' },
      { fieldName: 'gender', columnTitle: 'Gender', format: function(formatArgs) {
          switch (formatArgs.value) {
            case 'm':
            case 'M':
              formatArgs.formattedValue = 'Male';
              break;
            case 'f':
            case 'F':
              formatArgs.formattedValue = 'Female';
              break;
          }
        }
      },
      { fieldName: 'forename', columnTitle: 'Forename' },
      { fieldName: 'address.country', columnTitle: 'Country'  },
      { fieldName: 'address.city', columnTitle: 'City'  },
      { fieldName: 'phone', columnTitle: 'Phone'  }
    ] // fields to output in csv
  }
);

csvTransform.on('end', function() {
  // done
})

csvTransform.pipe(fs.createWriteStream('people.csv', {
  encoding: 'utf8'
));

Async transform/formatting

When asyncWrite is set to true, format function takes an additional callback parameter:

// ...................................
      { fieldName: 'somefield', columnTitle: 'Some Field', format: function(formatArgs, cb) {

          // call some async function
          getFormattedValue(formatArgs.value, function(formattedValue) {

              // set formatted value
              formatArgs.formattedValue = formattedValue;

              // in async mode, format function has to call back once completed
              cb();
          }
      },
// ...................................