MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MeteorJS-Vorlage zeigt keine Daten an, erscheint nicht

In diesem Fall handelt es sich hauptsächlich um ein Missverständnis des Datenmodells von Meteor.

Obwohl es möglich ist, Daten mit einem Methodenaufruf zu senden, werden Sie normalerweise Veröffentlichungen und Abonnements verwenden wollen um Daten an den Client zu senden. Diese haben die fast magische Eigenschaft, dass Abfragen live sind - Das heißt, alle Aktualisierungen der Abfrage werden automatisch an den Client gesendet. Der aktuelle Code, den Sie haben, würde, wenn er richtig funktionierte, keine Live-Daten enthalten. Das spezifische Problem ist dieser Meteor.call ist asynchron, sodass Ihr Nachrichtenhelfer nichts sieht.

Stattdessen möchten Sie Folgendes tun. Auf dem Server richten Sie eine Veröffentlichung ein der Nachrichtensammlung:

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

Beachten Sie die Unterschiede zu Ihrem Code:Es gibt kein fetch() , weil wir einen Live-Cursor wollen, und die 20 ist wahrscheinlich das, was Sie als Begrenzungsoption beabsichtigt haben. Beachten Sie, dass ich dies auch someWeirdName genannt habe denn das ist der Name der Publikation , und nicht die Sammlung, die Sie zum Abonnieren auf dem Client verwenden. Eine ausführlichere Erklärung finden Sie in diesem Beitrag .

Dann brauchen Sie auf dem Client einfach Folgendes:

Meteor.subscribe("someWeirdName");

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

Beachten Sie, dass Ihr vorheriger Aufruf von Meteor.subscribe("Messages") tat nichts, weil es keine Veröffentlichung mit dem Namen Messages gab . Außerdem werden wir den clientseitigen Nachrichten-Cache verwenden, um einen Cursor zum Anzeigen der Nachrichten zu erstellen.

Außerdem erfordert dieser gesamte Code, dass Sie Folgendes sowohl auf dem Server als auch auf dem Client deklariert haben:

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

Beachten Sie auch, dass das zum Instanziieren dieser Sammlung verwendete Argument nichts damit zu tun hat, wie Sie in Ihrem Code auf die Sammlung verweisen, es sei denn, Sie schreiben einen benutzerdefinierte Veröffentlichung . Es identifiziert einfach die Sammlung in der zugrunde liegenden Datenbank.