我正在尝试使用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 tutorial。 Discover 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/