Meteor JS:客户端未从 Mongo DB 获取数据

问题描述 投票:0回答:5

我已经开始学习 MeteorJS 并制作了一个示例应用程序。我在 mongoDB 中有一个集合,我试图在客户端中查看该集合 这是我的服务器代码(文件位于 /libs 中)

newColl=new Meteor.Collection("newColl");
if(Meteor.isServer){
  Meteor.publish('newCollectionData', function(){
     console.log(newColl.find().fetch());
    return newColl.find();
  });
}

这是我的客户端代码(文件位于/client)

  Meteor.subscribe("newCollectionData");
//console.log(newColl.find());
console.log(newColl.find().fetch());
var data= newColl.find().fetch();
console.log(data);

登录服务器打印数据正确,但登录客户端打印空数组。 PS:我已经删除了自动发布,但它也给出了相同的结果。我哪里错了?

javascript mongodb meteor client-server meteorite
5个回答
4
投票

Cursor.fetch()
立即返回当前可用的数据。如果调用时客户端上没有可用数据,则不会返回任何内容。

它是无功源,所以只要尝试在

Tracker.autorun
中调用它,当无功源改变时它就会重新计算。

Tracker.autorun(function () {
  console.log(newColl.find().fetch());
});

3
投票

如何从html访问Mongo DB中的数据?

首先,您需要在全局变量中存在 Mongo DB 实例,即它必须在任何 .js 文件中声明,如下所示。 它不是客户端或服务器代码的一部分

假设我们在一个 js 文件中创建一个事件集合。

    EventList = new Mongo.Collection('Events');

现在,为了从 HTML 访问所有对象,我们需要在 .js 文件中的客户端内提供一个辅助函数。以下是使用的 Helper:-

    Template.viewEvent.helpers  ({ 
        //NOTE : 'event' is the name of variable from html template
        'event' : function () {
             //returns list of Objects for all Events
             return EventList.find().fetch();
         }
        'users' : function () {
             //returns reference to Document for all users
             return UserList.find().fetch();
         }

    });

留下来显示.html上的所有内容:-

假设 EventList Collection 有字段 Event_Name、Event_Date。下面是html模板代码

    <template name="viewEvent">
       <h2>View Event</h2>
       <!-- Iterate on all Objects fetched by the Helper Class-->
       {{#each event}}
          {{Event_Name}} : {{Event_Date}} 
       {{/each}}
   </template>

1
投票

尝试放置

newColl=new Meteor.Collection("newColl");     

同时进入客户端和服务器端,看看它是否有效?

还可以在浏览器控制台中尝试 console.log(newColl.find().fetch()) 并查看它是否返回任何数据。如果是,那么可能是因为打印 newColl.find().fetch() 时数据还没有准备好。


0
投票

我是meteor.js 的新手(所以也许我错了)。 我认为你需要实现一些方法来观察集合的变化,以避免在渲染页面时你可以使用流星模板。

如果您只想从客户端查看日志用于“学习”目的,只需从浏览器使用客户端控制台即可。


0
投票

如果文件命名/访问正确,请尝试检查并添加自动发布方式

meteor add autopublish

我在观看流星大学联系人教程时遇到了这个错误

© www.soinside.com 2019 - 2024. All rights reserved.