Meteor:将所有用户发布到客户端

Mic*_*McC 10 meteor

为什么这不起作用?:

在客户端和服务器上:

AllUsers = new Meteor.Collection('allUsers');
Run Code Online (Sandbox Code Playgroud)

仅在服务器上:

Meteor.publish('allUsers', function() {
return Meteor.users.find();
});
Run Code Online (Sandbox Code Playgroud)

仅在客户端:

Deps.autorun(function(){
Meteor.subscribe("allUsers");
});
Run Code Online (Sandbox Code Playgroud)

启动此应用程序后,AllUsers.find().count()为零,但在终端中执行db.users.find.count()会给出正确的数字(3).即使我在浏览器中添加了一个新用户(使用标准的ui-accounts包形式),这肯定会导致用户集合发生变化,但我的AllUsers集合中仍然没有文档.我正在试图解决这个问题!

Dav*_*don 22

服务器上定义的Meteor集合与数据库中的集合具有1:1的关系.您在调用的数据库中没有集合'allusers',因此该定义没有意义.您似乎对数据库集合和已发布结果集的概念感到困惑.

当您将帐户包添加到项目中时,meteor Meteor.users会在客户端和服务器上为您定义集合,因此您无需再次执行此操作.您的代码看起来很好 - 只需删除new Meteor.Collection并通过访问用户Meteor.users.find.


收集定义解释

通过包为您创建的集合

  • 示例:Meteor.usersaccounts包创建
  • 注意:数据库中的集合是db.users.你可以通过做类似的事情使这个集合看起来像你定义的其他集合Users = Meteor.users,然后调用Users.find()而不是Meteor.users.find().

在客户端和服务器上定义的集合

  • 例: new Meteor.Collection('rooms')
  • 注意:在大多数项目中,这几乎都是你所做的.该字符串'rooms'是数据库(db.rooms)中集合的名称.文档可以从服务器发布到客户端.

在客户端上定义但不在服务器上定义的集合

  • 例: new Meteor.Collection('userCount')
  • 注意:服务器可以写入客户端集合,但不用于将数据同步到数据库.典型的用例是通知客户端有关另一个集合的大小或其他元数据.这里的字符串'userCount'与数据库集合的名称不对应,而只是客户端和服务器商定的标识符.
  • 另请参阅:如何:发布到仅客户端集合Meteor订阅和显示用户计数

在客户端上定义的非托管本地集合

  • 例: new Meteor.Collection(null)
  • 注意:这些是在客户端想要具有集合语义但不想使用该集合与服务器通信时定义的.典型的用例是演示应用程序,用户可以使用界面进行播放,但只能更改自己浏览器中的数据.