2016-05-26 4 views
3

Я пытаюсь получить список всех пользователей в метеор, используя 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> 

ответ

2

Несколько проблем. Я настоятельно рекомендую вам пройти хотя бы the tutorial. Категория: Новости Discover Meteor Электронная книга также бесценна. Один из первых шагов в понимании «Метеор» переходит от традиционной модели запроса-ответа XHR к публикации-подписке.

  1. Ваш email помощник должен return значение.
  2. Meteor.call() ничего не возвращает. Обычно вы используете его с обратным вызовом, который дает вам статус ошибки и результат. Однако вы не можете использовать это в помощнике, если вы не используете переменную сеанса или , обещание, потому что возвращаемое значение из вызова находится на неправильном уровне контекста.
  3. Ваш метод returnmail возвращает только один адрес электронной почты из findOne(), а не какой-либо конкретной один либо, просто квазислучайной один (вы не можете гарантировать, какой документ findOne() собирается вернуться!)
  4. Вы создаете 5 идентичных пользователей с тем же адресом электронной почты и паролем. 2-5 будут терпеть неудачу из-за ограничения уникальности в поле электронной почты.

Теперь о решении.

  1. На сервере публиковатьUSers коллекции, включая только поле электронных писем (который представляет собой массив объектов)
  2. На клиенте, подписаться на эту публикацию.
  3. На клиенте перебирайте коллекцию пользователей и получайте адрес электронной почты от помощника.

сервер:

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

клиент ЯШ:

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> 
Смежные вопросы