MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Modelo MeteorJS não mostrando dados, não aparecendo


Neste caso, trata-se principalmente de um mal-entendido do modelo de dados do Meteor.

Embora seja possível enviar dados usando uma chamada de método, geralmente você desejará usar publicações e assinaturas para enviar dados ao cliente. Eles têm a propriedade quase mágica de que as consultas são ao vivo - ou seja, qualquer atualização da consulta será enviada ao cliente automaticamente. O código atual que você tem, se funcionasse corretamente, não teria dados ativos. O problema específico é que Meteor.call é assíncrono, então seu auxiliar de mensagens não verá nada.

Em vez disso, aqui está o que você quer fazer. No servidor, você configurará uma publicação da coleção de mensagens:
Meteor.publish("someWeirdName", function() {
  return Messages.find({},{ sort: { timestamp:-1}, limit: 20});
});

Observe as diferenças do seu código:não há fetch() , porque queremos um cursor ativo e o 20 é provavelmente o que você pretendia como uma opção de limite. Observe que também chamei isso de someWeirdName porque esse é o nome da publicação , e não a coleção, que você usará para se inscrever no cliente. Para obter uma explicação mais detalhada, consulte esta postagem .

Então, no cliente, você só precisa do seguinte:
Meteor.subscribe("someWeirdName");

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

Observe que sua chamada anterior de Meteor.subscribe("Messages") não estava fazendo nada, porque não havia nenhuma publicação chamada Messages . Além disso, vamos usar o cache de mensagens do lado do cliente para criar um cursor para exibir as mensagens.

Além disso, todo esse código exige que você tenha o seguinte declarado no servidor e no cliente:
Messages = new Mongo.Collection("callMeWhateverYouWant");

Observe também que o argumento usado para instanciar esta coleção não tem nada a ver com como você se refere à coleção em seu código, a menos que você esteja escrevendo um publicação personalizada . Ele simplesmente identifica a coleção no banco de dados subjacente.