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:npm
和meteorhacks: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 并在回调中发送输出,但这是一个更复杂的解决方案,可能不需要。
我正在从事一个涉及解析 CSV 类文件的项目,其中分隔符在解析时确定。
我一直在使用 PapaParse,但遗憾的是分隔符检查似乎不够可靠,所以我改用 https://github.com/touv/node-csv-string。到目前为止一切顺利。
我已经安装了meteorhacks:npm
和meteorhacks: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 并在回调中发送输出,但这是一个更复杂的解决方案,可能不需要。