Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a CSV file from a Meteor.js Collection

I've written my code so far and can get a list of all the records to show up on a webpage, however I need to be able to get it as a CSV (comma separated values) file.

Right now the page shows a list like follows:

Name      Address      Description
Bob       1 street     Journalist
Bill      2 street     Fireman
etc...

Anyway I can have meteor create a CSV file for download, instead of it showing up as a webpage with all the HTML markup?

like image 339
npderi Avatar asked Dec 01 '14 22:12

npderi


1 Answers

Based on How to serve a file using iron router or meteor itself?

HTML:

<template name="blah">
  <a href="{{pathFor 'csv'}}">Download the CSV</a>
</template>

JS:

// An example collection
var DummyData = new Mongo.Collection("dummyData");

// create some sample data
if (Meteor.isServer) {
  Meteor.startup(function() {
    var dummyDataCursor = DummyData.find();
    if (dummyDataCursor.count() === 0) {
      for(var i=1; i<=100; i++) {
        DummyData.insert({Name: "Name" + i,Address: "Address" + i, Description:"Description" + i});
      }
    }
  });
}

Router.route('/csv', {
  where: 'server',
  action: function () {
    var filename = 'meteor_dummydata.csv';
    var fileData = "";

    var headers = {
      'Content-type': 'text/csv',
      'Content-Disposition': "attachment; filename=" + filename
    };
    var records = DummyData.find();
    // build a CSV string. Oversimplified. You'd have to escape quotes and commas.
    records.forEach(function(rec) {
      fileData += rec.Name + "," + rec.Address + "," + rec.Description + "\r\n";
    });
    this.response.writeHead(200, headers);
    return this.response.end(fileData);
  }
});
like image 123
cobberboy Avatar answered Sep 28 '22 06:09

cobberboy