显示Meteor中的用户电子邮件地址列表

时间:2016-05-26 19:09:47

标签: meteor

我正在尝试使用Metor.methods

获取meteor中所有用户的列表

这是我的代码: 服务器/ main.js

Meteor.methods({
  'createUser': function(){
    if (Meteor.users.find({}).count()===0) {
      for (i = 0; i <= 5; i++){
        let id = Accounts.createUser({
          email: Meteor.settings.ADMIN_USE,
          password: Meteor.settings.ADMIN_PASSWORD,
          profile: { firstName: Meteor.settings.ADMIN_FIRSTNAME, lastName: Meteor.settings.ADMIN_LASTNAME }
        });
       }
     }
   },

  'returnmail': function(){
    return Meteor.users.findOne().emails[0].address;
  }
});

然后我在另一个名为 Listusers.js 的文件中调用此函数:

Template.ListUsers.helpers({
  email: function(){
    Meteor.call('returnmail');
  },
});

我正在尝试使用此代码显示电子邮件的值,但它不起作用

客户端/ ListUsers.html

<Template name="ListUsers">
  <input id="mail" type="text" value="{{email}}" />
</Template>

1 个答案:

答案 0 :(得分:3)

几个问题。我强烈建议您至少通过the tutorialDiscover Meteor电子书也非常宝贵。理解Meteor的第一步是从传统的XHR请求 - 响应模型转变为发布 - 订阅。

  1. 您的email帮助者需要return一个值。
  2. Meteor.call()不会返回任何内容。通常,您将它与回调一起使用,以便为您提供错误状态和结果。但是,除非使用会话变量 promise ,否则不能在帮助程序中使用它,因为调用的返回值是在错误的上下文级别。
  3. 您的returnmail方法只返回findOne()的单个电子邮件地址,而不是任何特定的电子邮件地址,只是一个准随机的(您无法保证哪个文档findOne()是要回来!)
  4. 您正在使用相同的电子邮件地址和密码创建5个相同的用户。由于电子邮件字段的唯一性限制,2-5将失败。
  5. 现在解决方案。

    1. 在服务器上,发布 用户集合,仅包括电子邮件字段(对象数组)
    2. 在客户端上,订阅到该出版物。
    3. 在客户端上,遍历用户集合并从帮助程序获取电子邮件地址。
    4. 服务器:

      Meteor.publish('allEmails',function(){
        // you should restrict this publication to only be available to admin users
        return Meteor.users.find({},{fields: { emails: 1 }});
      });
      

      客户js:

      Meteor.subscribe('allEmails');
      
      Template.ListUsers.helpers({
        allUsers(){ return Meteor.users.find({}); },
        email(){ return this.emails[0].address; }
      });
      

      客户端html:

      <Template name="ListUsers">
        {{#each allUsers}}
          <input id="mail" type="text" value="{{email}}" />
        {{/each}}
      </Template>