Подтвердить что ты не робот

Импорт файла JSON в Meteor

У меня есть файл data.json, который я бы хотел загрузить и который я поместил в папку lib/. Что я должен сделать, чтобы загрузить этот JSON в переменную на сервере? Благодаря

4b9b3361

Ответ 1

Есть три способа сделать это, это зависит от того, что вам больше всего нравится, и вашего прецедента.

Первый заключается в том, чтобы сохранить его как объект JS

если ваши json-данные { "name":"bob" }, вы можете использовать myjson = {"name":"bob"} в файле .js в папке /lib и просто вызвать myjson, когда вам это нужно.

Использование http-вызова

Вам нужен пакет Meteor http, установленный через meteor add http.

Кодовый код сервера

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

Клиентский код

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

Еще один способ сделать это: ajax-стиль json файла (вам придется поместить его в папку /public и использовать Meteor.http для его вызова.

Прочитайте файл напрямую

Наконец, вы можете прочитать файл напрямую, вы сохраните myfile.json в каталоге private в корне проекта:

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

Если вы хотите получить доступ к этому на клиентской стороне, вам придется связать его с Meteor.methods и Meteor.call

Итак, какой бы вы ни хотели, первый из них самый простой, но я не слишком уверен, как вы хотите его использовать, или хотите выбрать файл или что-то.

Ответ 2

Поскольку я новичок во всем этом, я подозреваю, что это не правильный способ сделать это, однако это сработало для меня...

Три файла кофе script, два в каталоге сервера:

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)

и 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)

и model.coffee в корневом каталоге:

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

При запуске это должно загрузить и вставить файл JSON (в моем случае я сохранил это в каталоге тестов) в поле в коллекции документов.

Мне бы хотелось услышать от других, как это должно быть сделано должным образом.

Ответ 3

Я предполагаю, что вы хотите, чтобы содержимое json представлялось как объект, а не как простая строка.

Я использую js-yaml (https://github.com/nodeca/js-yaml), предполагая, что вы устанавливаете пакет npm. Вы также можете просто скопировать его вручную.

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

и что это! Я лично сохраняю свой json в коллекции метеоров.