【问题标题】:Getting specific user data from Meteor Presence从 Meteor Presence 获取特定的用户数据
【发布时间】:2013-05-10 02:50:26
【问题描述】:

使用 Meteor Presence,我可以返回在线用户的用户 ID。我想看看如何取回用户对象。

Meteor.publish('userPresence', function() {
  return Meteor.presences.find({}, {fields: {state: true, userId: true}});
});

如您所见,我正在发布收藏并订阅它:

Meteor.subscribe('userPresence');

我有一个包含每个块的视图来获取所有在线用户:

<template name="presenceList">
   <h1>{{onlineCount}}</h1>
   {{#each onlineUsers}}
      {{> presenceSingle}}
   {{/each}}
</template>

这也是包含助手的文件:

Template.presenceList.helpers({
    onlineUsers: function() {
    return Meteor.presences.find();
   },
   onlineCount: function() {
    return Meteor.presences.find().count();
   }
});

我最大的困难是在我的单用户模板中返回用户名。

任何帮助都会很棒,谢谢。

【问题讨论】:

    标签: mongodb meteor handlebars.js meteorite


    【解决方案1】:

    添加下划线包

    mrt add underscore
    

    然后您可以将您的在线用户更新为

    onlineUsers: function() {
      var users = _.map(Meteor.presences.find().fetch(), function(user) { 
        return Meteor.users.findOne({_id :user.userId})
      });
      return users;
    }
    

    我在上面所做的只是使用下划线的 _.map 使用 Meteor.users.findOne({_id :user.userId}) 返回的对象创建一个新数组,参见link

    最后,你的存在单一模板

    <template name="presenceSingle">
      <p>{{_id}}</p>
      <p>{{createdOn}}</p>
      <p>{{emails.0.address}}</p>
      <br/>
    </template>
    

    在这里,我返回每个用户的 mongo 文档的 _id、createdAt 和电子邮件地址字段。您可以返回任何您喜欢的字段。请注意用于返回电子邮件地址的把手语法。 emails 是一个包含 1 个元素的数组,但我们使用 emails.0 而不是 emails[0]

    访问这些元素

    【讨论】:

    • jamin 你是王牌,非常感谢。我什至不需要安装下划线,因为它看起来可能已经有了它。无论如何,除了我得到这个日志记录错误之外,一切都很好。 Exception from Deps recompute: Error: Can't create second landmark in same branch 知道是什么原因造成的吗?
    • 其实我好像说得太早了。起初我不认为这个错误会破坏任何东西,但我现在意识到,如果我与其他用户一起登录,它实际上并没有更新。
    • 山姆不用担心。我认为这是一个实际的流星错误......它在 Chrome 上引发了该错误,但在 Firefox 上没有。
    • 知道如何只返回已登录的用户。如果我在未登录的情况下访问该站点,它仍然会将我添加到计数中。我想我可以在这里添加一个过滤器return Meteor.presences.find({}, {fields: {state: true, userId: true}});,但不确定要添加什么来返回刚刚登录的用户
    • 好的,好的,是的,看起来错误代码只是一个错误,它实际上正在工作,所以再次感谢您。其次,它看起来好像正在返回所有访问该站点的人,无论他们是否是用户。我假设这可以通过使用过滤器来解决。第三,它看起来好像没有返回其他用户信息,我假设这是一个安全问题,无论如何我可以允许用户发布将用户名发送给所有用户吗?任何帮助将不胜感激
    【解决方案2】:

    您有从 Meteor.presences.find() 返回的文档中用户的 ID 对吗?为什么不运行查询从 Mongo 获取单个用户对象

    Meteor.users.findOne({_id: theIDFromDoc});
    

    【讨论】:

    • 我如何将它添加到模板助手中,以便它取回对象。我如何从文档中获取 ID?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    相关资源
    最近更新 更多