2013-03-12 14 views

Odpowiedz

78

Są trzy sposoby na osiągnięcie tego celu, zależy to od tego, co najbardziej Ci odpowiada.

Pierwszym jest przechowywanie go jako JS Object

jeśli dane JSON jest { "name":"bob" } można użyć myjson = {"name":"bob"} w pliku .js w folderze /lib i zadzwoń myjson gdy jest to potrzebne.

Korzystanie połączenia http

Trzeba pakiet Meteor http, zainstalowanego przez meteor add http.

kod Server Side

myobject = HTTP.get(Meteor.absoluteUrl("/myfile.json")).data; 

Client Code Side

HTTP.get(Meteor.absoluteUrl("/myfile.json"), function(err,result) } 
    console.log(result.data); 
}); 

Innym sposobem na to jest do pobrania styl plik json ajax (trzeba by umieścić go w /public folder i użyj Meteor.http, aby go wywołać:

Czytaj plik bezpośrednio

Wreszcie można odczytać pliku bezpośrednio na przechowywanie myfile.json w private katalogu w katalogu głównym twojego projektu:

var myjson = {}; 
myjson = JSON.parse(Assets.getText("myfile.json")); 

Jeśli chcesz uzyskać dostęp do tego po stronie klienta musiałby połączyć go z meteorytem i meteorytem.zadzwoń

Więc w zależności od tego, jak chcesz, pierwsza to najprostszy, ale nie jestem zbyt pewien, jak chcesz go używać, czy chcesz, aby wybrać plik lub coś

+0

Skończyło się na używaniu pierwszego rozwiązania, ponieważ jest najłatwiejsze. Dodałem plik do/server, aby nie był również ładowany do klienta. Dzięki – Alex

+0

Hi Akshat Próbowałem Twojego kodu, ale otrzymuję "ReferenceError: __meteor_bootstrap nie jest zdefiniowany". mój plik json znajduje się w tym samym folderze, co plik js. –

+0

Czy to jest kod po stronie klienta? Powyższe działa tylko w bloku 'if (Meteor.isServer) {..}' lub w dowolnym miejscu po stronie serwera js, tak jak w folderze '/ server'. Modułów npm nie można umieścić na kliencie, więc zamiast tego można je pobrać za pomocą wywołania http – Akshat

2

Ponieważ jestem nowy w tym wszystkim ja podejrzewam, że to nie jest poprawna sposób to zrobić jednak ten pracował dla mnie ...

trzy pliki coffeescript, dwa w katalogu serwera :

server.coffee:

Meteor.startup -> 
    insertSample = (jsondata) -> 
     Fiber(-> 
     Documents.insert 
      name: "Sample doc" 
      data: jsondata 
    ).run()   
    if Documents.find().count() is 0 
     insertJSONfile("tests/test.json", insertSample) 

i insertJSONfile.coffee:

fs = __meteor_bootstrap__.require("fs") 

insertJSONfile = (file, insert) -> 
    jsondata = undefined 
    fs.readFile file, (err, data) -> 
    throw err if err 
    jsondata = JSON.stringify(JSON.parse(data)) 
    insert(jsondata) 

i model.coffee w głównym katalogu:

@Documents = new Meteor.Collection("documents") 

Na starcie powinno załadować i wstawić plik JSON (w moim przypadku mam to zapisane w katalogu testów) do pola w dokumentach kolekcja.

Chciałbym usłyszeć od innych, jak należy to robić właściwie.

1

zakładam chcesz zawartość json być reprezentowanym jako obiekt, a nie jako prosty ciąg znaków.

Używam js-yaml (https://github.com/nodeca/js-yaml), zakładając, że zainstalowałeś pakiet npm. Możesz również po prostu skopiować go ręcznie.

yaml = __meteor_bootstrap__.require('js-yaml') 
fs = __meteor_bootstrap__.require('fs') 
content = fs.readFileSync(file, 'utf8') 
object = yaml.load(content) 

i to wszystko! Osobiście utrzymuję mój json w kolekcjach meteorów.

+0

Wolę używać JSON, ponieważ mam już plik w tym formacie. Wczytam ten plik (zawierający miasta i regiony) do pamięci na początku aplikacji Meteor. – Alex

+0

Również, jeśli używasz yaml, spójrz na pakiet yaml dotyczący atmosfery, który jest już zbudowany na meteory – Akshat

Powiązane problemy