【问题标题】:Meteor: reading simple JSON fileMeteor:读取简单的 JSON 文件
【发布时间】:2016-10-04 07:50:03
【问题描述】:

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

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

然而,这个看似非常简单的示例并没有将任何内容记录到控制台。如果我尝试将它存储在一个变量中而不是在控制台上。记录它然后在客户端显示它我得到 ​​p>

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,结果大致相同。

希望有人能帮帮我

【问题讨论】:

    标签: json meteor


    【解决方案1】:

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

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

    1. 使用Assets.getText 与您所做的完全相同,但在服务器上的一个方法中,并从客户端调用此方法以返回结果。对我来说,这似乎是最好的选择,因为您通过该方法限制对数据的访问,而不是完全公开。
    2. 将它放在public 文件夹中,然后使用jQuery.getJSON() 之类的东西来阅读它。这不是我做过的事情,所以我无法提供任何进一步的建议,但看起来很简单。

    【讨论】:

    • 所以我在 server/start.js 创建了一个流星方法 Meteor.methods({ readit: function(){ return JSON.parse(Assets.getText('test.json')); ; } 并将其称为客户端 Template.hello.events({ 'click input': function () { // 模板数据,如果有的话,在 'this' 中可用 if (typeof console !== 'undefined') console.log ("你按下了按钮"); console.log(Meteor.call('readit')) alert (Meteor.call('readit')) } }); } });
    • @Jaspermid 请记住 Meteor 调用是异步的,您需要从回调中读取数据,因为它不会直接返回值(var value = Meteor.call("readit") 将返回 undefined)。请参阅下面的异步调用:docs.meteor.com/#meteor_call
    • @Akshat 感谢您的反馈,我不太了解文档。我如何从回调中读出数据?将其存储在变量中然后使用它不起作用。
    【解决方案2】:

    服务器方法没问题,只是去掉多余的分号(;)。你需要在客户电话中多做一点。 JSON 数据来自回调。

    在你的点击事件中使用它:

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

    流星!

    【讨论】:

    • @RandelS.Hynes 谢谢!最后一个问题:)。我需要更改什么来返回 JSON.parse(Assets.getText('test.json')) 让它读取名为 test.xml 的 XML?只是将 Json 更改为 xml 不起作用^^
    • Assets.getText 以字符串形式获取文件内容。如果您将该测试 JSON 文件格式化为正确的 XML,它将被读取为字符串。 JSON.parse("string") 采用 JSON 格式的字符串并将其读取为 JSON。我不做XML,所以不知道有没有等价于JSON.parse()的XML。
    猜你喜欢
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2021-12-09
    • 2011-02-18
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多