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

时间:2013-11-13 04:20:00

标签: meteor

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

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

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

请帮我解决这个问题。我在这里缺少什么?

1 个答案:

答案 0 :(得分:5)

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

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

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

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