用户之间的流星私信

时间:2014-07-05 14:34:33

标签: meteor

现在我在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?

2 个答案:

答案 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获取名称。