【发布时间】: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”发布。 我想知道这个问题是否有解决方案,或者我的方法是否错误。
如果您还需要什么,请告诉我。
【问题讨论】: