我有以下用例:
users表中的每个主题都由id引用,而不是名称。有一个单独的表叫做#34; subject"通过id保存主题。
我想将用户发布到客户端,然而我希望首先使用主题填充已发布的用户。
我尝试了以下内容,受到this blog post的启发:
// in the backend service on port 3030
Meteor.publish('users', function(userId) {
var _this = this;
Meteor.users.find({
_id: userId
}).forEach(function(user) {
user.profile = populate(user.profile);
console.log(user);
_this.changed('users', userId, {
_id: userId,
profile: user.profile
});
});
_this.ready();
});
// in the client
var UserService = DDP.connect('http://localhost:3030');
var UserServiceProfile = UserService.subscribe('users', Meteor.userId());
console.log(UserServiceProfile);
这会在后端出现以下错误:
Exception from sub users id akuWx5TqsrArFnQBZ Error: Could not find element with id XhQu77F5ChjcMTSPr to change
。
所以我尝试将_this.changed
更改为_this.added
。我没有收到任何错误,但即使我看到populate
函数通过console.log(user)
行工作,但客户端中的更改并未显示出来。1}}。 p>
答案 0 :(得分:4)
我不确定您是如何修复代码的,但您可能不需要。看起来你想要https://atmospherejs.com/maximum/server-transform包。
将服务器转换包添加到您的项目中,并用此替换您的代码(我假设您还将下划线添加到您的项目中,数据库中的主题集合对应于代码中名为主题的全局变量。):
Meteor.publishTransformed('users', function(userId) {
return Meteor.users.find({
_id: userId
}).serverTransform({
'profile.subjects': function(doc) {
var subjects = [];
_(doc.profile.subjects).each(function(subjectId) {
subjects.push(Subjects.findOne(subjectId));
});
return subjects;
}
});
});