所以我创建了一个用户个人资料页面,并且让当前用户的所有数据都正常工作。我遇到的问题是当前用户无法看到其他用户数据。
我已经查看了我在网络上可以找到的所有内容,但却找不到对我有帮助的答案,只是做了很多不同的做法。
我的发布
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。
答案 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);