Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor:将所有用户发布到客户端_Meteor - Fatal编程技术网

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(空)
  • 注意:当客户端希望具有集合语义,但不希望使用集合与服务器通信时,会定义这些语义。一个典型的用例是一个演示应用程序,用户可以使用一个界面,但只能在自己的浏览器中更改数据

成功了!你是对的,我混淆了这两件事——在花了很多时间研究Meteor书籍和文档之后,我仍然不清楚您提供给“new Meteor.Collection()”的参数。我知道在某些情况下如何使用它,但不知道它到底是什么。这是收藏的名字?那么,为什么集合需要变量名和字符串名呢?谢谢你的帮助。这可能值得单独提一个问题,但我还是继续写了一篇关于集合定义的完整文章。如果你发现这个答案是有用的,请考虑把它标记为。关于集合定义的信息是非常有用的。你的“如何接受答案”信息链接也是如此。我刚刚看到这个帖子。你好,大卫。这是否意味着console.log(“count:+Meteor.users.find().count());inclient将在没有任何订阅的情况下工作?我做了一个快速的测试,结果什么也没有出现。数据库中显然有用户。顺便说一句,谢谢你的指导。好的。@JimmyMGLim我很高兴这对你有帮助。:)当
autopublish
处于关闭状态时,默认情况下仅将当前用户(如果您已登录)发布到客户端。您需要订阅其他用户才能获得客户端的计数。只需控制台中的注释。打字错误db.users.find.count()。应该是db.users.find().count()