我在列出用户集合中的所有用户时遇到问题。当我进入列表页面时,仅显示当前登录用户的详细信息。但是,只要刷新页面即可,所有用户都会被列出来。
在服务器端,我有以下发布代码
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)
请帮我解决这个问题。我在这里想念什么?
这听起来像是订阅的竞争条件(它在用户登录之前运行)。我建议将您的订阅放入自动运行中:
Tracker.autorun(function() {
if (Meteor.user()) {
Meteor.subscribe('userList');
}
});
Run Code Online (Sandbox Code Playgroud)
这还有一个好处,就是在用户登录之前不启动您的订阅(节省资源)。
顺便说一句,我想不出为什么您需要this.stop()发布功能和结束功能的原因。