MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Le modèle MeteorJS n'affiche pas de données, n'apparaît pas

Dans ce cas, il s'agit principalement d'une mauvaise compréhension du modèle de données de Meteor.

Bien qu'il soit possible d'envoyer des données à l'aide d'un appel de méthode, vous souhaiterez généralement utiliser publications et abonnements pour envoyer des données au client. Ceux-ci ont la propriété presque magique que les requêtes sont en direct - c'est-à-dire que toutes les mises à jour de la requête seront automatiquement envoyées au client. Le code actuel que vous avez, s'il fonctionnait correctement, n'aurait pas de données en direct. Le problème spécifique est que Meteor.call est asynchrone, donc votre assistant de messagerie ne verra rien.

Au lieu de cela, voici ce que vous voulez faire. Sur le serveur, vous mettrez en place une publication de la collection de messages :

Meteor.publish("someWeirdName", function() {
  return Messages.find({},{ sort: { timestamp:-1}, limit: 20});
});

Notez les différences avec votre code :il n'y a pas de fetch() , car nous voulons un curseur dynamique, et le 20 est probablement ce que vous vouliez comme option de limite. Notez que j'ai aussi appelé cela someWeirdName car c'est le nom de la publication , et non la collection, que vous utiliserez pour vous abonner sur le client. Pour une explication plus détaillée, vous pouvez consulter cet article .

Ensuite, sur le client, vous avez simplement besoin des éléments suivants :

Meteor.subscribe("someWeirdName");

Template.messages.helpers({
    showMessages: function(){
        return Messages.find();
    }
});

Notez que votre appel précédent de Meteor.subscribe("Messages") ne faisait rien, car il n'y avait pas de publication nommée Messages . De plus, nous allons utiliser le cache des messages côté client pour créer un curseur pour afficher les messages.

De plus, tout ce code nécessite que vous ayez déclaré ce qui suit à la fois sur le serveur et sur le client :

Messages = new Mongo.Collection("callMeWhateverYouWant");

Notez également que l'argument utilisé pour instancier cette collection n'a rien à voir avec la façon dont vous vous référez à la collection dans votre code, sauf si vous écrivez un publication personnalisée . Il identifie simplement la collection dans la base de données sous-jacente.