我正在尝试使用Metor.methods获取流星中所有用户的列表

这是我的代码:
服务器/ 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');
  },
});


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

Client / ListUsers.html

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

最佳答案

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


您的email助手需要return值。
Meteor.call()不返回任何内容。通常,您将其与回调一起使用,该回调为您提供错误状态和结果。但是,除非使用Session变量或Promise,否则不能在助手中使用它,因为调用的返回值处于错误的上下文级别。
您的returnmail方法仅从findOne()返回一个电子邮件地址,也不返回任何特定的电子邮件地址,而只是一个准随机的电子邮件地址(您不能保证findOne()会返回哪个文档!)
您正在使用相同的电子邮件地址和密码创建5个相同的用户。 2-5由于电子邮件字段的唯一性约束而失败。


现在开始解决。


在服务器上,发布仅包含电子邮件字段(是对象数组)的Users集合。
在客户端上,订阅该出版物。
在客户端上,遍历用户集合并从帮助程序获取电子邮件地址。


服务器:

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>

关于meteor - 显示 meteor 中的用户电子邮件地址列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37469191/

10-13 05:24