gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:55:43 25 4
gpt4 key购买 nike

为什么这不起作用?:

在客户端和服务器上:

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 集合中仍然没有文档。我正在努力解决这个问题!

最佳答案

在服务器上定义的 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:将所有用户发布到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20555827/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com