发布用户数据,用于个人资料页面

时间:2015-07-16 15:28:02

标签: javascript meteor

所以我创建了一个用户个人资料页面,并且让当前用户的所有数据都正常工作。我遇到的问题是当前用户无法看到其他用户数据。

我已经查看了我在网络上可以找到的所有内容,但却找不到对我有帮助的答案,只是做了很多不同的做法。

我的发布

Meteor.publish('allUsers', function(user){
  return Meteor.users.find({_id: this.userId},{
     fields: {
           profile: 1,       
           emails:1,                                                                                                              
           username: 1
       }
   }); 
}); 

我的路由器

Router.route('/profile/:_id', {
 name: 'profile',
  waitOn: function(){
  return Meteor.subscribe('allUsers')},
  data: function(){
      var user = this.params._id;
      return Meteor.users.findOne({_id: user});
  },
});

个人资料模板

<template name='profile'>
      Username: {{username}}<br>
      Email: {{email}}
      {{log}}
      {{#with profile}}
          Full Name: {{name}}
          {{log}}
          {{/with}}

 </template>

辅助

Template.profile.helpers({
  name: function(){    
      return this.name;
  },
  username: function(){
      return this.username;
  },  
  email: function(){
      return this.emails[0].address;
  },  
  log: function(){
      console.log(this);
  }       
});

这就是我链接到其他用户的方式

<a href="/profile/{{owner}}">{{username}}</a>

所有者是用户_id:

当前用户的日志输出显示数据,但另一个用户的日志输出是空对象。虽然它抓住了正确的_id。

1 个答案:

答案 0 :(得分:1)

allUsers出版物中,您会找到{_id: this.userId}的用户。 this.userId是订阅用户的ID。这意味着您要发布用户自己的数据,而不是任何其他用户的数据。如果您要发布所有用户,则需要使用.find({}, {fields: ...})

对于拥有多个用户的应用程序,发布所有用户并不是一个好主意,因此您只能发布一个用户:

Meteor.publish("userById", function (requestedUserId) {
  return Meteor.users.find({_id: requestedUserId}, {fields: ...});
});

然后,当您在路由器中订阅时,传入用户ID:

Meteor.subscribe("userById", this.params._id);