【问题标题】:Meteor: Publishing all users to the clientMeteor:将所有用户发布到客户端
【发布时间】:2013-12-14 03:01:34
【问题描述】:

为什么这不起作用?:

在客户端和服务器上:

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 包表单),这肯定会导致用户集合发生变化,但我的 AllUsers 集合中仍然没有文档。我正在努力解决这个问题!

【问题讨论】:

  • 只是控制台中的一个注释。错字.. db.users.find.count()。应该是 db.users.find().count()

标签: meteor


【解决方案1】:

在服务器上定义的 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' 不对应数据库集合的名称,而只是客户端和服务器商定的标识符。
  • 另见:How To: Publish to a Client Only CollectionMeteor Subscribe and Display Users Count

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

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

【讨论】:

  • 成功了!你是对的,我混淆了两件事——在使用 Meteor 书和研究文档很长时间之后,我仍然不清楚你提供给“new Meteor.Collection()”的那个参数。我了解在某些情况下如何使用它,但不知道它到底是什么。是收藏的名字吗?那么为什么集合需要一个变量名和一个字符串名呢?感谢您的帮助。
  • 这可能值得单独提出一个问题,但我继续并附上了关于集合定义的完整文章。如果您觉得此答案有帮助,请考虑将其标记为 accecpted
  • 关于集合定义的信息非常有用。正如您指向“如何接受答案”信息的链接一样。我现在才看到这篇文章。
  • 嗨,大卫。它是否暗示 console.log("count: "+ Meteor.users.find().count()); inclient 将在没有任何订阅的情况下工作?我做了一个快速测试,没有任何反应。 db中显然有用户。顺便说一句,感谢您的指导。好一个。
  • @JimmyMGLim 我很高兴它有帮助。 :) 关闭autopublish,默认情况下只有当前用户(如果您已登录)会发布到客户端。您需要订阅其他用户才能获得客户端的计数。
猜你喜欢
  • 2016-10-01
  • 2014-01-06
  • 1970-01-01
  • 2017-05-04
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
相关资源
最近更新 更多