我无法访问当前用户以外的用户的用户个人资料详细信息。
目标是在博客条目列表中的每个帖子下显示一个小页脚。页脚应包含帖子和作者详细信息(如日期,用户名等)。
博客条目由作者的_id标识,但重点是我无法访问
Meteor.users.find({_id : authorId});
结果游标似乎与Meteor.user(不是“用户”)相同,并且只包含一个文档,并且仅对当前用户ID有效。对于其他人,比如作者ID,我只能获得一个空集合。
问题是,如果有什么办法,那么下一个Meteor.users订阅获取作者资料(如用户名profile.nick等)???
答案 0 :(得分:1)
更新:如果您想在单个订阅中获取博客条目和用户详细信息,则可以Publish Composite打包。请参阅以下示例代码并根据您的集合模式进行编辑,
Meteor.publishComposite('blogEntries', function (blogEntryIds) {
return [{
find: function() {
return BlogEntries.find({ courseId: { $in: blogEntryIds }});
// you can also do -> return BlogEntries.find();
// or -> return BlogEntries.find({ courseId: blogEntryId });
},
children: [{
find: function(blogEntry) {
return Meteor.users.find({
id: blogEntry.authorId
}, {
fields: {
"profile": 1,
"emails": 1
}
});
}
}}
}]
});
更新结束
您需要从服务器发布Meteor.users
才能在客户端上使用它。 accounts
包会发布当前用户,这就是您只看到当前用户信息的原因。
在服务器文件夹或Meteor.isServer
if
块中的文件中执行类似此操作
//authorIds = ["authorId1", "authorId2];
Meteor.publish('authors', function (authorIds) {
return Meteor.users.find({ _id : { $in: authorIds }});
});
或
Meteor.publish('author', function (authorId) {
return Meteor.users.find({ _id : authorId });
});
然后在客户端订阅此出版物,在模板的onCreated函数中,使用类似的东西
Meteor.subscribe('author', authorId); //or Meteor.subscribe('author', authorIds);
或
template.subscribe('author', authorId); //or template.subscribe('author', authorIds);
答案 1 :(得分:1)
如果您只想显示用户名(或其他一些字段),可以将它们与authorId一起保存在帖子文档中。例如:
post:{
...
authorId: someValue,
authorName: someValue
}
您可以在模板中将它们用作帖子的字段。 如果您有太多不希望嵌入帖子文档的字段(因此您只想保留authorId),则可以在发布帖子时使用publish-composite。 (见例1)
您无需发布所有用户及其个人资料。