Meteor:阅读简单的JSON文件

时间:2014-06-29 09:12:57

标签: json meteor

我正在尝试使用Meteor读取JSON文件。我已经在stackoverflow上看到了各种答案,但似乎无法使它们工作。我有tried this one基本上说:

  1. 使用以下内容创建名为private / test.json的文件:
  2. [{"id":1,"text":"foo"},{"id":2,"text":"bar"}]
    
    1. 在服务器启动时读取文件内容(server / start.js):
    2. Meteor.startup(function() {
       console.log(JSON.parse(Assets.getText('test.json')));
      });
      

      然而,这个看似非常简单的示例不会将任何内容记录到控制台。如果我试着将它存储在一个变量而不是console.logging它然后显示它客户端我得到

      Uncaught ReferenceError: myjson is not defined 
      

      其中myjson是我存储它的变量。我试过阅读JSON客户端

          Template.hello.events({
          'click input': function () {
              myjson = JSON.parse(Assets.getText("myfile.json"));
              console.log("myjson")
        });
      }
      

      结果是:

      Uncaught ReferenceError: Assets is not defined 
      
      1. 如果尝试了此处描述的所有选项:Importing a JSON file in Meteor或多或少相同的结果。
      2. 希望有人可以帮助我

2 个答案:

答案 0 :(得分:4)

根据the docsAssets.getText仅在服务器上可用,因为它旨在读取private目录中的数据,客户端无法访问该目录(因此这个名字。)

如果您想将此信息提供给客户,您有两种选择:

  1. 完全按照您的方式使用Assets.getText,但在服务器上的方法内,并从客户端调用此方法以返回结果。这似乎是我的最佳选择,因为您通过该方法限制对数据的访问,而不是将其完全公开。
  2. 将其放在public文件夹中,并使用类似jQuery.getJSON()的内容来阅读它。这不是我曾经做过的事情,所以我无法提供任何进一步的建议,但看起来非常简单。

答案 1 :(得分:3)

服务器方法没问题,只需删除多余的分号(;)即可。您需要在客户呼叫中多一点。 JSON数据来自回调。

在点击事件中使用此功能:

if (typeof console !== 'undefined'){
    console.log("You're calling readit");
    Meteor.call('readit',function(err,response){
        console.log(response);
    });
}

流星!