2017-10-03 3 views
0

Je suis nouveau à météore. Donc, je veux accéder aux données de ma base de données locale dans mongodb. Je Client.js dans le dossier clientMeteor serveur local peut accéder à la base de données, mais le client ne peut pas

Meteor.subscribe('Signal'); 
console.log(Data.find().fetch()); 

Et mon répertoire du serveur a main.js ayant pour résultat la borne

console.log(Data.find()); 

Meteor.publish('Signal', function() { 
    return Data.find().fetch(); 
}); 

serveur montre CONSOLE.LOG mais le client ne montre rien les Chrome console

Sous lib/je collectons.js il contient

Data = new Mongo.Collection('data'); 

J'ai vérifié mon mongodb du shell et les données de collection sont présentes avec les données nécessaires. Qu'est-ce que je fais mal?

Répondre

1

Vous oubliez que Meteor.subscribe() sur le client n'est pas action immédiate, et la publication prendra son temps pour remplir les documents au client.

Heureusement, Meteor.subscribe() returns a subscription handle, qui peut être utilisé pour déterminer la disponibilité de l'abonnement.

const handle = Meteor.subscribe('Signal'); 
Tracker.autorun(() => { 
    if (handle.ready()) { 
    // subscription is ready 
    console.log(Data.find().fetch()); 
    } 
}); 

Vous pouvez également passer votre onReady rappel comme le dernier argument de Meteor.subscribe():

Meteor.subscribe('Signal',() => { 
    // subscription is ready 
    console.log(Data.find().fetch()); 
}); 
+0

Merci beaucoup pour cette solution. En fait, je l'ai réparé en utilisant 'iron: router'. Mais cela semble beaucoup mieux car je n'ai pas besoin d'installer de paquet supplémentaire. qu'en penses-tu? est-ce mieux avec des fonctions intégrées ou intégrées? Merci – Khacho

+0

@Khacho 'fer: routeur' juste faire quelque chose de similaire sous le capot. En fait, cela dépend de la façon dont vous utiliserez ces données plus tard. Si vous l'utilisez dans des assistants de modèle - vous n'avez même pas besoin de ce code, ils (les assistants) sont déjà réactifs et ils seront réexécutés après que votre abonnement récupérera des données. – Styx