从 Meteor.js 集合创建 CSV 文件

5

我已经编写了代码,可以在网页上显示所有记录的列表,但是我需要将其以CSV(逗号分隔值)文件的形式获取。

现在页面显示的列表如下:

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

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

可能是重复的问题:如何使用Iron Router或Meteor本身来提供文件? - David Weldon
1个回答

8

基于如何使用iron router或meteor本身提供文件服务?

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

我应该注意到:这需要使用 Iron Router。 meteor add iron:router - cobberboy
好的,太棒了。我没有意识到我可以这样使用Iron Router。谢谢cobberboy,非常有帮助。我会尝试一下,并回来更新。 - npderi
这很棒,而且也很有效。然而,我现在遇到的问题是,当我点击按钮时,它会将我路由到我的'/csv'服务器端路由,具有该按钮的模板被销毁,我的视图也丢失了?有没有一种方法可以保留所有加载的模板,并且不让它们被销毁,同时在服务器上运行'/csv'路由?或者像防止模板销毁方法或Router.go()这样的东西,在服务器端CSV路由的结论处...或其他什么...? - WizzyBoom
@WizzyBoom,你尝试给<a>元素添加target="_blank"属性了吗?例如: <a href="{{pathFor 'csv'}}" target="_blank">下载CSV文件</a> - cobberboy
1
@cobberboy 谢谢!我通过将链接设为按钮并添加一个模板事件 'click .btnExportCSVFormat' : function(e) { window.location.href = '/export-csv/' + $(e.target).attr('data-list-id'); } 解决了我的问题,这样在下载完成后无需对视图进行任何操作或弹出新窗口或选项卡以关闭。也许有更简洁的方法,但现在这个方案对我很有效。谢谢! - WizzyBoom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接