2016-02-24 2 views
0

У меня есть серверные файлы & и я пытаюсь отправить некоторые данные в Javascript, а не в шаблон. В шаблоне я могу вывести некоторые значения, но мне нужно в JS добавить маркеры в Leaflet.Как связать сайт Метеор с существующим db & collection?

Я думаю, нет смысла перекачивать данные через шаблоны, чтобы попасть в JS и в Листовку, не так ли?

Что я делаю неправильно?

оболочки

$ mongo 
MongoDB shell version: 2.4.9 
connecting to: test 
> use atms 
switched to db atms 
> db.markers.count() 
1868 

Запуск сервера:

$ MONGO_URL=mongodb://127.0.0.1:27017/atms meteor 

LIB/collections.js

Markers = new Meteor.Collection('markers'); 

В клиент/client.js, я стараюсь, чтобы получить записи из коллекции, но он пуст:

Template.hello.helpers({ 
    marks: function() { 
     // this data renders correctly on map 
     return Markers.findOne({}) 
    } 
}); 

Template.hello.onRendered(function() { 
    // this data is empty in console 
    var query = Markers.find().fetch(); 
    console.log(query); 
}); 

В шаблоне, он показывает одну запись, что означает, что работы соединения. Но выход консоли - [].

ответ

1

Основная проблема заключается в вас есть 2 разных Markers коллекции на клиенте и сервере. Таким образом, на клиенте meteor обращается к коллекциям Marker клиента и не отображает никаких данных. Определение коллекции должно делиться между клиентом и сервером, а не дублироваться.

Создайте папку lib и поместить определение сбора там

//lib/collections.js 
Markers = new Mongo.Collection('markers') 

И удалить определение сбора в обоих server и client папку.

Кроме того, следует помнить, что при использовании отделенных mongo экземпляра, реакционная способность будет происходить довольно медленно (2 или 3 раза по сравнению с вложенной mongo)

+0

Тип кода обработанный, без ключевого слова 'var' (иначе маркеры снова не определены). Я перезапустил его с помощью «MONGO_URL», никаких сбоев, но все равно пустую коллекцию. –

+0

извините за «var».я скопировал/вставил ваш код и не видел этого. –

+0

Мне удалось нажать одну запись через шаблоны, но почему «Markers.find(). Fetch()' ничего не показывает в console.log? –

0

Довольно уверен, что это отвечает здесь:

Using Multiple Mongodb Databases with Meteor.js

Просто записку о синтаксисе, в версии 1.2.1 вы хотите, чтобы объявить свою коллекцию Meteor в качестве глобальной переменной, она может быть доступна за пределами файл, в который вы его вводите. Кроме того, вы хотите поместить эту строку в/lib или в каталог, к которому могут обращаться как клиент, так и сервер.

Markers = new Mongo.Collection('markers') 
+0

Я не понимаю. В 'server.js' я запускаю это соединение с' _driver', и кажется, что все в порядке. Но в 'client.js' я оставляю его одинаковым, и ничего не меняется, все равно пустой массив. Если я удаляю объявление 'Marker' из' client', то оно не определено и js сбой. Но я не могу скопировать этот код '_driver', потому что' MongoInternals' не определен в cilent. –

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