Meteor.js:在服务器上解析 CSV 并使用 node-csv-string 传回客户端

Meteor.js: Parsing CSV on the server and passing back to client with node-csv-string

我正在从事一个涉及解析 CSV 类文件的项目,其中分隔符在解析时确定。

我一直在使用 PapaParse,但遗憾的是分隔符检查似乎不够可靠,所以我改用 https://github.com/touv/node-csv-string。到目前为止一切顺利。

我已经安装了meteorhacks:npmmeteorhacks:async,但我不确定如何在服务器和客户端之间来回传递解析请求。我知道我需要使用回调来执行此操作,因为它是异步的,只是不确定如何去做。

在我的客户端,这是我拥有的:

var parsedData = Meteor.call("parseCSV", data);

在服务器上,我使用的方法类似于:

Meteor.methods({
  parseCSV: function (data) {
    var CSV = Meteor.npmRequire('csv-string');
    return CSV.parse(data);
  }
});

尽管由于异步要求,这显然不会削减它。我试过类似

var response = Async.runSync(function(done) {
  CSV.parse((data), function(err, data) {
    done(null, data);
    console.log(data)
  });
});

但老实说这是暗中试探,并没有奏效。我需要能够通过客户端中的 parsedData 访问已解析的 CSV。任何帮助将不胜感激!

您可以使用 Meteor 的 Meteor.wrapAsync 方法。

Meteor.methods({
  parseCSV: function (data) {
    var CSV = Meteor.npmRequire('csv-string');
    var parse = Meteor.wrapAsync(CSV.parse);
    return parse(data);
  }
});

发生这种情况的原因是因为 Meteor 使用节点 Fibers 并且需要您具有同步代码。您还可以实现 fiber / future 并在回调中发送输出,但这是一个更复杂的解决方案,可能不需要。