从Meteor.js集合创建CSV文件

时间:2014-12-01 22:22:01

标签: javascript mongodb csv meteor

到目前为止,我已编写了我的代码,并且可以获取要在网页上显示的所有记录的列表,但是我需要能够将其作为CSV(逗号分隔值)文件获取。

现在页面显示如下列表:

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

无论如何,我可以让meteor创建一个CSV文件供下载,而不是显示为包含所有HTML标记的网页?

1 个答案:

答案 0 :(得分:7)

基于 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);
  }
});