我的应用中有注册用户,例如: test@live.com 。当用户输入要登录的电子邮件地址时,我想检查每次按键时用户是否存在并显示消息。
我写了以下代码:
Template.login.events({
'keyup .userEmail': function(event){
event.preventDefault();
var email=$('[name=email]').val();
var checkExistence=Meteor.users.find({ emails: { $elemMatch: { address: email } }}).count() > 0 ;
console.log(checkExistence);
}
});
如果电子邮件地址存在,查询应返回true。
当用户编写完整的电子邮件地址 test@live.com (存在于数据库中)时,checkExistence
应为true,但其值仍为false。< / p>
为什么会这样?如何判断用户的电子邮件是否已在系统中?
答案 0 :(得分:1)
这很可能是因为客户端没有所需的所有数据来回答这个问题(也不应该)。这可以更好地实现为一种方法(异步)。
发送所有用户&#39;不希望向用户发送电子邮件作为浪费服务器资源和带宽的不必要开销以及安全/隐私问题。
解决此问题的一种方法是向模板添加一个反应变量,该变量代表验证状态。当回调返回时,它可以检查正在验证的电子邮件是否仍然是在文本框中键入的电子邮件并相应地更改状态。
您可能还应该在查询之前限制事件处理并验证电子邮件。
此外,请注意,事件处理方法中的event.target
包含由提供给events()
的对象键中的选择器指定的元素。