从Meteor.js集合创建CSV文件

npd*_*eri 5 javascript csv mongodb meteor

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

现在,该页面显示如下列表:

Name      Address      Description
Bob       1 street     Journalist
Bill      2 street     Fireman
etc...
Run Code Online (Sandbox Code Playgroud)

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

cob*_*boy 7

基于如何使用铁路由器或流星本身提供文件?

HTML:

<template name="blah">
  <a href="{{pathFor 'csv'}}">Download the CSV</a>
</template>
Run Code Online (Sandbox Code Playgroud)

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);
  }
});
Run Code Online (Sandbox Code Playgroud)