Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Meteor: reading simple JSON file

Tags:

json

meteor

I am trying to read a JSON file with Meteor. I've seen various answers on stackoverflow but cannot seem to get them to work. I have tried this one which basically says:

  1. Create a file called private/test.json with the following contents:
[{"id":1,"text":"foo"},{"id":2,"text":"bar"}]
  1. Read the file contents when the server starts (server/start.js):
Meteor.startup(function() {
 console.log(JSON.parse(Assets.getText('test.json')));
});

However this seemingly very simple example does not log anything to the console. If I trye to store it in a variable instead on console.logging it and then displaying it client side I get

Uncaught ReferenceError: myjson is not defined 

where myjson was the variable I stored it in. I have tried reading the JSON client side

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

Which results in:

Uncaught ReferenceError: Assets is not defined 
  1. If have tried all of the options described here: Importing a JSON file in Meteor with more or less the same outcome.

Hope someone can help me out

like image 299
Jaspermid Avatar asked Jun 29 '14 09:06

Jaspermid


2 Answers

As per the docs, Assets.getText is only available on the server as it's designed to read data in the private directory, to which clients should not have access (thus the name).

If you want to deliver this information to the client, you have two options:

  1. Use Assets.getText exactly as you have done, but inside a method on the server, and call this method from the client to return the results. This seems like the best option to me as you're rationing access to your data via the method, rather than making it completely public.
  2. Put it in the public folder instead and use something like jQuery.getJSON() to read it. This isn't something I've ever done, so I can't provide any further advice, but it looks pretty straightforward.
like image 133
richsilv Avatar answered Sep 23 '22 16:09

richsilv


The server method is OK, just remove the extra semi-colon(;). You need a little more in the client call. The JSON data comes from the callback.

Use this in your click event:

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

Meteor!

like image 23
Randell S. Hynes Avatar answered Sep 20 '22 16:09

Randell S. Hynes