Meteorjs - 迭代用户数据的正常方式



我正在使用MeteorJs开发一个系统,我需要获取在我的MongoDB中注册的所有电子邮件和用户个人资料。这是我的发布.js

if (Meteor.isServer) {
    Meteor.publish('Userlist', function() {
       return Meteor.users.find({}, {fields: {emails: 1, profile: 1}});
    });
}

这是我在模板级别订阅用户数据的地方res_user.js

Template.reg_user.onCreated(function() {
    this.subscribe('Userlist');
});
Template.reg_user.helpers({
    userku: function() {
       let user = Meteor.users.find();
       return user;   
    },   
});

这是我的网页

 {{#each userku}}
       <ul>
           <li>{{emails.address}} </li>
           <li>{{profile.name}} </li>
       </li>
 {{/each}}

当我尝试在我的 HTML 中迭代它时,它不会显示任何电子邮件,只是配置文件名称,在观看本教程后我发现需要一些自定义助手来接收电子邮件,所以知道我添加新的助手

Template.reg_user.helpers({
   // same code here
   getEmail: function(){
        return this.emails[0].address;
   }
});

并在我的 HTML 中调用此帮助程序而不是普通帮助程序

{{#each userku}}
   <ul>
       <li>{{getEmail}} </li>
       <li>{{profile.name}} </li>
   </li>
{{/each}}

为什么我不能使用正常的方式来获取电子邮件地址数据?当我看到Mongo结构时,它与profile.address相同。有人可以解释为什么以及何时应该使用这样的自定义帮助程序,因为当我尝试实现某些东西但不知道原因时,它会让我感到烦恼。

Meteor 用户文档中的电子邮件结构

用户电子邮件的结构是一个数组,主要是因为您可能有多个电子邮件地址与您的帐户相关联:

{
  ...
  emails: [
    {
      address: 'someone@provider.com'
      verified: false // or true
    }
  ]
  ...
}

在没有帮助者的情况下显示电子邮件

因此,为了

在没有其他帮助程序的情况下成功显示电子邮件,您需要遍历所有电子邮件:

{{#each userku}}
   <ul>
       {{#each emails}}
       <li>{{this.address {{#if this.verified}}(verified){{/if}}</li>
       {{/each}}
       <li>{{profile.name}} </li>
   </li>
{{/each}}

如果用户关联了多个电子邮件,这当然会显示所有电子邮件。

仅显示第一封电子邮件

要始终仅显示第一封电子邮件,您需要另一个帮助程序:

Template.reg_user.helpers({
  firstMail (emails){
    return emails[0];
  }
});

并像这样称呼它:

{{#each userku}}
   <ul>
       {{#with firstMail emails}}
       <li>{{this.address {{#if this.verified}}(verified){{/if}}</li>
       {{/with}}
       <li>{{profile.name}} </li>
   </li>
{{/each}}

更多阅读材料

请注意,我在示例中也使用了verified字段,更多内容可在此处阅读:

https://docs.meteor.com/api/passwords.html#Accounts-verifyEmail

关于该主题的一般阅读在这里:

https://docs.meteor.com/api/accounts.html

最新更新