sql >> Base de Datos >  >> NoSQL >> MongoDB

Plantilla MeteorJS que no muestra datos, no aparece

En este caso, se trata principalmente de un malentendido del modelo de datos de Meteor.

Aunque es posible enviar datos usando una llamada de método, normalmente querrá usar publicaciones y suscripciones para enviar datos al cliente. Estos tienen la propiedad casi mágica de que las consultas son en vivo - es decir, cualquier actualización de la consulta se enviará al cliente automáticamente. El código actual que tiene, si funcionara correctamente, no tendría datos en vivo. El problema específico es que Meteor.call es asincrónico, por lo que su asistente de mensajes no verá nada.

En su lugar, esto es lo que desea hacer. En el servidor, configurará una publicación de la colección de mensajes:

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

Tenga en cuenta las diferencias con su código:no hay fetch() , porque queremos un cursor vivo y el 20 es probablemente lo que pretendías como una opción de límite. Tenga en cuenta que también llamé a esto someWeirdName porque ese es el nombre de la publicación , y no la colección, que utilizará para suscribirse en el cliente. Para obtener una explicación más detallada, es posible que desee ver esta publicación .

Luego, en el cliente, simplemente necesita lo siguiente:

Meteor.subscribe("someWeirdName");

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

Tenga en cuenta que su llamada anterior de Meteor.subscribe("Messages") no estaba haciendo nada, porque no había ninguna publicación llamada Messages . Además, vamos a utilizar el caché de mensajes del lado del cliente para crear un cursor para mostrar los mensajes.

Además, todo este código requiere que haya declarado lo siguiente tanto en el servidor como en el cliente:

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

Tenga en cuenta también que el argumento utilizado para instanciar esta colección no tiene nada que ver con la forma en que se refiere a la colección en su código, a menos que esté escribiendo un publicación personalizada . Simplemente identifica la colección en la base de datos subyacente.