Я пытаюсь использовать коллекцию MongoDB, которая получается по подписке на стороне клиента Meteor. Кроме того, на стороне сервера опубликованная коллекция должна быть получена с удаленного сервера. Код был адаптирован из одного из стандартных примеров Meteor. Вот код сервера:Метеор опубликовать подписку с удаленными mongo возвращает пустые данные
import { Meteor } from 'meteor/meteor';
Meteor.startup(() => {
var sconn= new MongoInternals.RemoteCollectionDriver("mongodb://user:[email protected]:27017/mydb");
export const STasks= new Mongo.Collection("myCollection",{_driver: sconn});
Meteor.publish('stasks', function stasksPublication() {
return STasks.find({});
});
});
И, на клиенте, у меня есть
import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';
import './main.html';
// >>>>> I suppose these two functions are irrelevant for the problem at hand,
// >>>>> but I left just for sake of completeness.
Template.hello.onCreated(function helloOnCreated() {
// counter starts at 0
this.counter = new ReactiveVar(0);
});
Template.hello.helpers({
counter() {
return Template.instance().counter.get();
},
});
// >>>>> Here is where the problem happens:
Template.hello.events({
'click button'(event, instance) {
// increment the counter when button is clicked
instance.counter.set(instance.counter.get() + 1);
// My code to access data:
var STasks=new Mongo.Collection("myCollection");
Meteor.subscribe('stasks');
console.log('Testing data');
console.log(STasks.find().fetch());
},
});
Но все это я получаю на консоли клиента является пустой «[]». Я проверил, что на сервере нет проблем с доступом к документам в myCollection.
Я ничего не знаю о удаленных db, но в обработчике кликов вы делаете find() сразу после подписания(). это состояние гонки. появляются ли ваши данные, если вы дважды щелкнете после паузы? – zim
Я сделал это, но не успел. – IRO