【问题标题】:Avoid duplicated publication in Meteor避免在 Meteor 中重复发布
【发布时间】:2017-06-22 20:10:30
【问题描述】:

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

我做了什么

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

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”发布。 我想知道这个问题是否有解决方案,或者我的方法是否错误。

如果您还需要什么,请告诉我。

【问题讨论】:

    标签: reactjs meteor


    【解决方案1】:

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

    【讨论】:

    • 感谢您抽出宝贵时间回答。你说的有道理,但在我看来this.added 部分只能在Meteor.publish 的回调函数中使用。您是否想到了在集合中插入记录的另一种方法?
    • 感谢@Mikkel 解决了这个问题我删除了methods.js 创建了一个在run() 中执行代码的发布
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2017-09-20
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多