用户集合中所有用户的列表在第一次与Meteor js不兼容时

ano*_*oop 3 meteor

我在列出用户集合中的所有用户时遇到问题。当我进入列表页面时,仅显示当前登录用户的详细信息。但是,只要刷新页面即可,所有用户都会被列出来。

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

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;
});
Run Code Online (Sandbox Code Playgroud)

在客户端,

Meteor.subscribe('userList');
Run Code Online (Sandbox Code Playgroud)

在Template js文件中,我进行了以下调用,

Meteor.users.find();
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题。我在这里想念什么?

Dav*_*don 5

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

Tracker.autorun(function() {
  if (Meteor.user()) {
    Meteor.subscribe('userList');
  }
});
Run Code Online (Sandbox Code Playgroud)

这还有一个好处,就是在用户登录之前不启动您的订阅(节省资源)。

顺便说一句,我想不出为什么您需要this.stop()发布功能和结束功能的原因。