【发布时间】:2015-11-28 05:24:45
【问题描述】:
在我的流星应用程序中,我正在实现在用户之间发送消息的功能。 在我的应用中,我有一个路由和模板,用于显示发送给用户的所有消息。
控制器代码:
this.UserMessagesController = RouteController.extend({
template: "UserMessages",
waitOn: function() {
return Meteor.subscribe("userMessages");
},
data: function() {
return {
"messages": UserMessages.find({to: Meteor.userId()}, {sort: {time: -1}} )
}
}
});
}
});
在服务器端我有一个发布功能
Meteor.publish("userMessages", function() {
var userId = this.userId;
return UserMessages.find({to: userId}, {});
});
我还有一个未读消息的全球订阅:
Deps.autorun(function() {
if (Meteor.user()) {
Meteor.subscribe("unreadMessages");
}
});
Meteor.publish("unreadMessages", function() {
return UserMessages.find({to: this.userId, read: undefined}, {});
});
问题是:我只能看到模板上呈现的未读消息(以及客户端 minimongo 集合中的未读消息)
但是,如果我从发布功能中删除过滤器 {to: userId} 或删除对未读消息的订阅,我可以完美地看到每条消息!
PS:我尝试调试发布函数设置断点并评估 UserMessages.find({to: userId}, {}).fetch(),我得到了包含 15 条消息的绝对正确的数组。
PPS:我在服务器端和客户端都没有收到错误消息
可能有什么问题?
【问题讨论】:
-
您可以发布您的未读消息订阅吗?您说“...或删除对未读消息的订阅...”我怀疑订阅以某种方式覆盖了您想要的数据。
-
是的,Deps.autorun(function() { if (Meteor.user()) { Meteor.subscribe("current_user_data"); Meteor.subscribe("unreadMessages"); } });
标签: javascript mongodb meteor