2017-02-02 4 views
0

Я пытаюсь использовать коллекцию 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.

+0

Я ничего не знаю о удаленных db, но в обработчике кликов вы делаете find() сразу после подписания(). это состояние гонки. появляются ли ваши данные, если вы дважды щелкнете после паузы? – zim

+0

Я сделал это, но не успел. – IRO

ответ

0

Попробуйте это:

import { Template } from 'meteor/templating'; 
import { ReactiveVar } from 'meteor/reactive-var'; 

import './main.html'; 

var STasks=new Mongo.Collection("myCollection"); 

Template.hello.onCreated(function helloOnCreated() { 
    // ... 
    this.subscribe('stasks'); 
}); 

Template.hello.helpers({ 
    // ... 
}); 

Template.hello.events({ 
    'click button'(event, instance) { 
    // ... 
    console.log(STasks.find().fetch()); 
    }, 
}); 
+0

Спасибо, но это не изменило поведения. – IRO

0

Я нашел решение: на стороне публикации, используйте параметр функции findlimit.

Meteor.publish('stasks', function stasksPublication() { 
    return STasks.find({},{limit:5}); 
}); 

Это кажется довольно странно, но у меня есть объяснение этому: myCollection действительно огромен, с около 500К строк. Вместо того, чтобы поднимать ошибку, в результате поведение показывает пустые скобки.

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

  • Нет связанных вопросов^_^