Asynchronous 在Meteor上异步读取文件
我对Meteor很陌生,如果这是一个愚蠢的问题,我道歉: 如何从服务器端的文件系统读取文件,并在客户端显示这些内容。同步做它不是一个问题,因为我可以立即返回它,但正如我从阅读中了解到的,这违背了Meteor的目的,所以我尝试异步做它。但是,我不知道如何以这种方式连接客户机/服务器。发布/订阅似乎只针对db集合,而不是文件系统文件。如果您能给我任何指导,我将不胜感激Asynchronous 在Meteor上异步读取文件,asynchronous,meteor,Asynchronous,Meteor,我对Meteor很陌生,如果这是一个愚蠢的问题,我道歉: 如何从服务器端的文件系统读取文件,并在客户端显示这些内容。同步做它不是一个问题,因为我可以立即返回它,但正如我从阅读中了解到的,这违背了Meteor的目的,所以我尝试异步做它。但是,我不知道如何以这种方式连接客户机/服务器。发布/订阅似乎只针对db集合,而不是文件系统文件。如果您能给我任何指导,我将不胜感激 if (Meteor.isClient) { Template.body.helpers({ myfile:
if (Meteor.isClient) {
Template.body.helpers({
myfile: function(){
return file_contents;
}
});
}
if (Meteor.isServer) {
Meteor.methods({
myfile: function(){
var fs = Npm.require("fs");
fs.readFile('/opt/SI/SIAgent/conf/myfile','utf-8', function (err, data) {
file_contents = data;
});
}
});
}您必须使用
Meteor.wrapAsync
将Node.JSfs.readFile
转换为同步外观代码,以便在Meteor方法中返回结果
var fs=Npm.require("fs");
fsReadFileSync=Meteor.wrapAsync(fs.readFile,fs);
Meteor.methods({
getMyFileContent:function(){
return fsReadFileSync("/opt/SI/SIAgent/conf/myfile","utf-8");
}
});
我想你应该研究一下流星的方法。我能够调用服务器方法,但不知道如何异步获取数据。基本上我想用文件的当前内容更新页面。或者你可以直接使用:)fs.readFileSync的问题在于它是真正同步的,并且会阻止节点事件循环,这与光纤的同步性相反,光纤的同步性只是使异步调用看起来像使用语法糖的同步代码
fs.readFileSync
实际上是您只想在基于节点的CLI中使用的东西。这一点很好!我想我应该想到这个。。。我们目前的代码库中没有任何包装函数,所以这不是我之前考虑过的问题。谢谢你的提醒。