У меня есть файл data.json, который я бы хотел загрузить и который я поместил в папку lib/. Что я должен сделать, чтобы загрузить этот JSON в переменную на сервере? Благодаря
Импорт файла JSON в Meteor
Ответ 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 в коллекции метеоров.