web-dev-qa-db-fra.com

Importation d'un fichier JSON dans Meteor

J'ai un fichier data.json que je voudrais charger et que j'ai placé dans le dossier lib /. Que dois-je faire pour charger ce JSON dans une variable du serveur? Merci

37
Alex

Il y a trois façons de procéder, cela dépend de ce qui vous convient le mieux et de votre cas d'utilisation.

La première consiste à le stocker en tant qu'objet JS

si vos données json sont { "name":"bob" } vous pouvez utiliser myjson = {"name":"bob"} dans un .js fichier dans le /lib dossier et appelez simplement myjson quand vous en avez besoin.

en utilisant un appel http

Vous avez besoin du Meteor http package, installé via meteor add http.

Code côté serveur

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

Code côté client

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

Une autre façon de le faire est de récupérer le style ajax du fichier json (vous devrez le mettre dans votre /public dossier et utilisez Meteor.http pour l'appeler.

Lire le fichier directement

Enfin, vous pouvez lire le fichier directement, vous stockez votre myfile.json dans un répertoire private à la racine de votre projet:

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

Si vous voulez y accéder du côté client, vous devrez l'interfacer avec Meteor.methods et Meteor.call

Donc, quelle que soit la façon dont vous le souhaitez, la première est la plus simple, mais je ne sais pas trop comment vous voulez l'utiliser ou si vous voulez choisir le fichier ou quelque chose

80
Akshat

Comme je suis nouveau dans tout cela, je soupçonne que ce n'est pas la façon correcte de le faire, mais cela a fonctionné pour moi ...

Trois fichiers de script de café, deux dans le répertoire du serveur:

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)

et insérerJSONfile.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)

et model.coffee dans le répertoire racine:

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

Au démarrage, cela devrait charger et insérer le fichier JSON (dans mon cas, je l'ai stocké dans le répertoire tests) dans un champ de la collection de documents.

Je serais ravi d'entendre les autres sur la façon dont cela devrait être fait correctement.

2
Paul Young

Je suppose que vous voulez que le contenu json soit représenté comme un objet et non comme une simple chaîne.

J'utilise js-yaml ( https://github.com/nodeca/js-yaml ), en supposant que vous installez le paquet npm. Vous pouvez également simplement le copier manuellement.

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

et c'est tout! Je persiste personnellement mon json dans les collections de météores.

1
Thierry