现在我在Meteor中开发了一个工作消息系统,用户可以在其中发送私人消息。
服务器如下所示:
// .. lot of code
Meteor.publish("privateMessages", function () {
return PMs.find({ to: this.userId });
});
PMs.allow({
insert: function(user, obj) {
obj.from = user;
obj.to = Meteor.users.findOne({ username: obj.to })._id;
obj.read = false;
obj.date = new Date();
return true;
}
});
// .. other code
当用户订阅privateMessages时,他会获得一个如下所示的mongo对象:
{ "to" : "LStjrAzn8rzWp9kbr", "subject" : "test", "message" : "This is a test", "read" : false, "date" : ISODate("2014-07-05T13:37:20.559Z"), "from" : "sXEre4w2y55SH8Rtv", "_id" : "XBmu6DWk4q9srdCC2" }
如何更改对象以返回用户名而不是用户ID?
答案 0 :(得分:0)
您需要以类似于将username
更改为_id
的方式执行此操作。您可以创建实用程序功能:
var usernameById = function(_id) {
var user = Meteor.users.findOne(_id);
return user && user.username;
};
修改强>
如果您不想针对每条消息轮询minimongo,请在消息对象中包含username
而不是_id
。由于username
是唯一的,它们就足够了。
如果您的应用中允许用户更改username
,那么还保留_id
作为记录可能是个好主意。
在我使用的一个较大的应用中,我们在模型中保留了用户的_id
(创建了个人资料的链接等),并缓存了他的{{1} }(用于显示目的)。
答案 1 :(得分:-1)
我建议从大气中添加收集帮助程序包。然后为PM调用toUser创建一个帮助程序,返回适当的用户。 然后,您可以使用message.user.name获取名称。