列出用户集合中第一次不使用meteor js的所有用户

列出用户集合中第一次不使用meteor js的所有用户,meteor,Meteor,我在列出用户集合中的所有用户时遇到问题。当我进入列表页面时,只显示当前登录用户的详细信息。但是,一旦页面刷新,所有用户都会被列出,并处于良好状态 在服务器端,我有以下发布代码 Meteor.publish("userList", function() { var user = Meteor.users.findOne({ _id: this.userId }); if (Roles.userIsInRole(user, ["admin"])) {

我在列出用户集合中的所有用户时遇到问题。当我进入列表页面时,只显示当前登录用户的详细信息。但是,一旦页面刷新,所有用户都会被列出,并处于良好状态

在服务器端,我有以下发布代码

Meteor.publish("userList", function() {

    var user = Meteor.users.findOne({
        _id: this.userId
    });


    if (Roles.userIsInRole(user, ["admin"])) {
        return Meteor.users.find({}, {
            fields: {
                profile_name: 1,
                emails: 1,
                roles: 1,
                contact_info: 1
            }
        });
    }

    this.stop();
    return;
});
在客户端

Meteor.subscribe('userList');
在模板js文件中,我进行以下调用

Meteor.users.find();

请帮我解决这个问题。我在这里遗漏了什么?

这听起来像是订阅的竞争条件(它在用户登录之前运行)。我建议您将订阅内容放入:

Tracker.autorun(函数(){
if(Meteor.user()){
Meteor.subscribe(“用户列表”);
}
});
这还有一个好处,即在用户登录之前不启动订阅(节省资源)


顺便说一句,我想不出你为什么需要
this.stop()
和发布函数的结尾。

这很有帮助。还有一件事,我想得到不包括登录用户的列表。所以我尝试了Meteor.users.find({u id:{$ne:this.userId},{fields:{profile_name:1,email:1,roles:1,contact_info:1});但它不起作用。对此有何建议?您的意思是:“如何发布除当前用户之外的所有用户?”还是“在模板中使用什么客户端查询来显示非当前用户的用户列表?”我有一个用户列表页面。我想要所有用户,除了已经登录的用户。使用当前的发布代码,我可以获取包括登录用户在内的所有用户,即使在查询中进行了上述修改。另外,我建议你阅读。所以发布者的目标是将数据库的一个子集发送到客户机,而不是发送与客户机上的任何一个查询完全匹配的子集。不允许您避免将当前用户发布到客户端,因此您拥有的数据超过了您的需要,这没关系。在客户端上,您可以执行类似于
Meteor.users.find({u id:{$ne:Meteor.usersId()}})的查询
以获取所需的列表。我希望这会有帮助。谢谢你,大卫。回答非常有帮助。