MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Il modello MeteorJS non mostra i dati, non appare

In questo caso, si tratta principalmente di un'incomprensione del modello di dati di Meteor.

Sebbene sia possibile inviare dati utilizzando una chiamata al metodo, di solito ti consigliamo di utilizzare pubblicazioni e abbonamenti per inviare dati al cliente. Questi hanno la proprietà quasi magica che le query sono attive - ovvero, eventuali aggiornamenti alla query verranno inviati automaticamente al client. Il codice corrente che hai, se funzionasse correttamente, non avrebbe dati in tempo reale. Il problema specifico è che Meteor.call è asincrono, quindi l'assistente messaggi non vedrà nulla.

Invece, ecco cosa vuoi fare. Sul server, imposterai una pubblicazione della raccolta dei messaggi:

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

Nota le differenze rispetto al tuo codice:non c'è fetch() , perché vogliamo un cursore live e il 20 è probabilmente ciò che intendevi come opzione limite. Nota che ho chiamato anche questo someWeirdName perché questo è il nome della pubblicazione , e non la raccolta, che utilizzerai per iscriverti al client. Per una spiegazione più dettagliata, potresti voler vedere questo post .

Quindi, sul client, hai semplicemente bisogno di quanto segue:

Meteor.subscribe("someWeirdName");

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

Tieni presente che la tua precedente chiamata a Meteor.subscribe("Messages") non stava facendo nulla, perché non c'era alcuna pubblicazione denominata Messages . Inoltre, utilizzeremo la cache dei messaggi lato client per creare un cursore per visualizzare i messaggi.

Inoltre, tutto questo codice richiede che tu abbia dichiarato quanto segue sia sul server che sul client:

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

Si noti inoltre che l'argomento utilizzato per creare un'istanza di questa raccolta non ha nulla a che fare con il modo in cui si fa riferimento alla raccolta nel codice, a meno che non si stia scrivendo un pubblicazione personalizzata . Identifica semplicemente la raccolta nel database sottostante.