Skip to content
A CSV transform stream
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
test
.gitignore
README.md
index.js
package.json

README.md

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();
          }
      },
// ...................................
You can’t perform that action at this time.