2013-03-12 3 views
36

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

ответ

78

Существует три способа сделать это, это зависит от того, что вам больше всего нравится с & ваш случай использования.

Во-первых, сохранить его как объект 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); 
}); 

Другой способ сделать это, чтобы принести стиль JSON файл АЯКС (вы должны положить его в /public, и использовать Meteor.http, чтобы позвонить ему.

Прочитайте файл непосредственно

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

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

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

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

+0

В итоге я использовал первое решение, так как оно является самым простым. Я добавил файл/сервер, чтобы он не загружался на клиент. Спасибо – Alex

+0

Hi Akshat Я пробовал ваш код, но я получаю «ReferenceError: __meteor_bootstrap не определен». Мой json-файл находится в той же папке, что и файл js. –

+0

Является ли этот код на стороне клиента? Вышеизложенное будет работать только в блоке 'if (Meteor.isServer) {..}' или где-либо на стороне сервера js, например, в папке '/ server'. npm модули не могут быть включены на клиенте, поэтому вместо этого вы можете получить его с помощью http-вызова – Akshat

2

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

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

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 (в моем случае я хранить это в каталоге тестов) в поле в документах коллекция.

Я хотел бы услышать от других, как это должно быть сделано правильно.

1

Я предполагаю, что вы хотите, чтобы содержание 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 в коллекции метеоров.

+0

Я предпочитаю использовать JSON, поскольку у меня уже есть файл в этом формате. Я загружаю этот файл (который содержит города и регионы) в память в начале приложения Meteor. – Alex

+0

Также, если вы используете yaml, посмотрите на пакет yaml на атмосферу, его уже построили для метеор – Akshat

Смежные вопросы