我正在尝试使用Meter / Sequelize将一些数据从MySQL数据库导出到CSV文件中。到目前为止我所做的是创建一个由客户端调用的Meteor方法,然后调用返回数据的服务器端函数,并将其解析为csv字符串。我的问题是返回客户端的日期。
我有我的CSV字符串服务器端,我正在使用FileSaver.js,它只能用于客户端。 我的“解决方案”是创建一个客户端集合,我在其中发布了String。
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();
});
});
}
},
在客户端,我以这种方式订阅出版物:
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”出版物。 我想知道是否有这个问题的解决方案,或者我的方法是否错误。
如果您还有其他需要,请告诉我。
答案 0 :(得分:0)
假设您每次都尝试发布到同一个集合,这是正确的。我认为您应该只进行一次发布,并将该记录单独插入到集合中。