避免在Meteor中重复发布

时间:2017-06-20 18:02:00

标签: reactjs meteor

我正在尝试使用Meter / Sequelize将一些数据从MySQL数据库导出到CSV文件中。到目前为止我所做的是创建一个由客户端调用的Meteor方法,然后调用返回数据的服务器端函数,并将其解析为csv字符串。我的问题是返回客户端的日期。

我做了什么

我有我的CSV字符串服务器端,我正在使用FileSaver.js,它只能用于客户端。 我的“解决方案”是创建一个客户端集合,我在其中发布了String。

methods.js

run({exportParam}) {
if (!this.isSimulation) {
  query.booksQuery(exportParam.sorted, exportParam.filtered, 0).then( 
  result => {
    let CSVArr = [];
    result.rows.forEach((value) => {
      CSVArr.push(value.dataValues);
    });
    const CSVString = Baby.unparse(CSVArr,{ delimiter: ";"});<-CSV String
    console.log("CSVString : ", CSVString);
    Meteor.publish("CSVString", function() { <= publication
      this.added("CSVCollection", Random.id(), {CSVString: CSVString});
      this.ready();
    });
  });
 }
},

在客户端,我以这种方式订阅出版物:

ExportButton.jsx

const handle = Meteor.subscribe('CSVString', {}, function() {
    const exportString = myTempCollection.findOne().CSVString;
    const blob = new Blob([exportString], {type:"text/plain;charset=utf 
    8"});
    FileSaver.saveAs(blob, "test.csv");
  });

我的问题

第一次单击我的按钮并下载CSV文件时效果很好。问题是,如果我再次执行此操作,我会获得与第一个相同的文件,并在控制台上收到此消息。

  

忽略名为'CSVString'的重复发布

我很确定问题来自于每次点击按钮时都会创建相同的“CSVString”出版物。 我想知道是否有这个问题的解决方案,或者我的方法是否错误。

如果您还有其他需要,请告诉我。

1 个答案:

答案 0 :(得分:0)

假设您每次都尝试发布到同一个集合,这是正确的。我认为您应该只进行一次发布,并将该记录单独插入到集合中。