如何在流星中获取其他用户的配置文件详细信息

时间:2016-02-25 13:35:00

标签: meteor accounts

我无法访问当前用户以外的用户的用户个人资料详细信息。

目标是在博客条目列表中的每个帖子下显示一个小页脚。页脚应包含帖子和作者详细信息(如日期,用户名等)。

博客条目由作者的_id标识,但重点是我无法访问

Meteor.users.find({_id : authorId});

结果游标似乎与Meteor.user(不是“用户”)相同,并且只包含一个文档,并且仅对当前用户ID有效。对于其他人,比如作者ID,我只能获得一个空集合。

问题是,如果有什么办法,那么下一个Meteor.users订阅获取作者资料(如用户名profile.nick等)???

2 个答案:

答案 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)

您无需发布所有用户及其个人资料。