Meteor:将所有用户发布到客户端
为什么这不起作用 在客户端和服务器上:Meteor:将所有用户发布到客户端,meteor,Meteor,为什么这不起作用 在客户端和服务器上: AllUsers = new Meteor.Collection('allUsers'); 仅在服务器上: Meteor.publish('allUsers', function() { return Meteor.users.find(); }); 仅在客户端上: Deps.autorun(function(){ Meteor.subscribe("allUsers"); }); 启动此应用程序后,AllUsers.find().count()为零
AllUsers = new Meteor.Collection('allUsers');
仅在服务器上:
Meteor.publish('allUsers', function() {
return Meteor.users.find();
});
仅在客户端上:
Deps.autorun(function(){
Meteor.subscribe("allUsers");
});
启动此应用程序后,AllUsers.find().count()为零,但在终端中执行db.users.find.count()会得到正确的数字(3)。即使我在浏览器中添加了一个新用户(使用标准ui accounts包表单),这肯定会导致users集合发生更改,但我的AllUsers集合中仍然没有文档。我正在拼命想办法解决这个问题 服务器上定义的Meteor集合与数据库中的集合具有1:1的关系。数据库中没有名为“allusers”的集合,因此该定义没有意义。您似乎混淆了数据库集合和已发布结果集的概念 将accounts包添加到项目中时,meteor会在客户端和服务器上为您定义
meteor.users
集合,因此您无需再次执行此操作。您的代码看起来不错-只需删除新Meteor.Collection
,并通过Meteor.users.find
访问用户即可
解释收集定义 由包为您创建的集合
- 示例:
由Meteor.users
包创建帐户
- 注意:数据库中的集合是
。通过执行类似于DB.users
的操作,然后调用Users=Meteor.Users
,而不是Users.find()
,可以使此集合看起来像您定义的其他集合Meteor.Users.find()
- 示例:
newmeteor.Collection('rooms')
- 注意:在大多数项目中,这几乎是您一直在做的事情。字符串
是数据库中集合的名称('rooms'
)。文档可以从服务器发布到客户端db.rooms
- 示例:
newmeteor.Collection('userCount')
- 注意:服务器可以写入客户端集合,但不用于将数据同步到数据库。典型的用例是将另一个集合的大小或其他元数据通知客户机。这里的字符串
与数据库集合的名称不对应,而只是客户机和服务器商定的标识符'userCount'
- 另见:和
- 示例:
newmeteor.Collection(空)
- 注意:当客户端希望具有集合语义,但不希望使用集合与服务器通信时,会定义这些语义。一个典型的用例是一个演示应用程序,用户可以使用一个界面,但只能在自己的浏览器中更改数据
autopublish
处于关闭状态时,默认情况下仅将当前用户(如果您已登录)发布到客户端。您需要订阅其他用户才能获得客户端的计数。只需控制台中的注释。打字错误db.users.find.count()。应该是db.users.find().count()