来自收集助手的Meteor.users信息

时间:2014-04-26 05:01:21

标签: meteor

我正在尝试通过集合帮助程序包获取一些非登录用户的信息,我显然在这里缺少一些基本的东西,因为我无处可去。

我有一个关系设置什么是愉快地返回文档所有者的profile.name元素,只要这恰好与登录用户一致,但是,我没有得到任何回复的非登录在用户中(因为客户端的安全性)。

我在客户端和服务器上添加了一个新的出版物

// User Profile
Meteor.publish("userProfile", function() {
  return Meteor.users.find({_id: this.userId},
    {fields: {'profile': 1}});
});

并在与我试图在

中显示的页面关联的js中订阅了此出版物
// Don't need this to be reactive, so
Meteor.subscribe("userProfile");

但仍无法使用

访问文档中的个人资料数据
<h4>Posted by: {{projOwner.profile.name}}</h4>

projOwner看起来像

projectDocs.helpers({
  projOwner: function() {
    console.log(this.owner._id);
    var owner = Meteor.users.findOne(this.owner._id);
    //console.log("Owner is: " +owner);
    return owner;
  }
});

我做错了什么?

1 个答案:

答案 0 :(得分:1)

在发布功能中,this.userId始终是当前登录用户的ID。当前用户的个人资料会自动发布,因此该功能不会做任何有用的事情。

这里的真正问题是您需要将正确的用户子集发布到客户端。也许这是您正在查看的文档的项目所有者,也许它是组中的所有用户,等等。如果不了解您的问题,很难说。

一个简单的开始就是发布所有用户以确保您的代码正常工作,然后尝试减少该设置。请记住,发布函数可以接受参数,因此您可以传入,例如,项目的ID,然后像这样发布所有者:

Meteor.publish('projectOwner', function(projectId) {
  check(projectId, String);
  var project = Projects.findOne(projectId);
  return Meteor.users.find(project.owner, {
    fields: {'profile': 1}
  });
});