Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous 在Meteor上异步读取文件_Asynchronous_Meteor - Fatal编程技术网

Asynchronous 在Meteor上异步读取文件

Asynchronous 在Meteor上异步读取文件,asynchronous,meteor,Asynchronous,Meteor,我对Meteor很陌生,如果这是一个愚蠢的问题,我道歉: 如何从服务器端的文件系统读取文件,并在客户端显示这些内容。同步做它不是一个问题,因为我可以立即返回它,但正如我从阅读中了解到的,这违背了Meteor的目的,所以我尝试异步做它。但是,我不知道如何以这种方式连接客户机/服务器。发布/订阅似乎只针对db集合,而不是文件系统文件。如果您能给我任何指导,我将不胜感激 if (Meteor.isClient) { Template.body.helpers({ myfile:

我对Meteor很陌生,如果这是一个愚蠢的问题,我道歉:

如何从服务器端的文件系统读取文件,并在客户端显示这些内容。同步做它不是一个问题,因为我可以立即返回它,但正如我从阅读中了解到的,这违背了Meteor的目的,所以我尝试异步做它。但是,我不知道如何以这种方式连接客户机/服务器。发布/订阅似乎只针对db集合,而不是文件系统文件。如果您能给我任何指导,我将不胜感激

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.JS
fs.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中使用的东西。这一点很好!我想我应该想到这个。。。我们目前的代码库中没有任何包装函数,所以这不是我之前考虑过的问题。谢谢你的提醒。