3

我在列出用户集合中的所有用户时遇到问题。当我进入列表页面时,只显示当前登录用户的详细信息。但是,一旦页面被刷新,所有用户都会被列出来,而且一切正常。

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

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');

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

Meteor.users.find();

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

4

1 回答 1

5

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

Tracker.autorun(function() {
  if (Meteor.user()) {
    Meteor.subscribe('userList');
  }
});

这具有在用户登录之前不开始订阅的额外好处(节省资源)。

BTW, I can't think of a reason why you'd need the this.stop() and the end of your publish function.

于 2013-11-13T04:52:54.620 回答