基于异步验证器的验证

时间:2016-01-05 15:51:15

标签: angularjs

您好我使用异步验证器来检查我的数据库中是否存在电子邮件,它检查得很好,它给了我正确的http请求,它可以正常使用,例如在第一次注册时,它会检查是否用户存在于我的数据库中。问题是例如当我用来恢复密码时。文档说:

"如果使用$ http,则服务器返回成功的HTTP响应代码非常重要  *为了完成验证和状态级别4xx以拒绝验证"

所以我发生的事情是,当用户在恢复密码页面中插入电子邮件时,它会给出“400 - 错误请求”的响应。并使表单/输入无效。我需要更改此beavihour,因为当400请求给出验证为真时,如果响应为200,则验证为false。

示例代码Js:

return {
    restrict: 'A',
    require: 'ngModel',
    link: function (scope, element, attribute, controller) {
        controller.$asyncValidators.uniqueEmail = function (email) {
            return $http
                .post('/api/email/availability', {value: email})
                then(function(response) {
                        //username exists, this means validation fails
                        return $q.reject('exists');
                      }, function(response) {
                        //username does not exist, therefore this validation passes
                        return true;
                })
        };
    }
}

1 个答案:

答案 0 :(得分:0)

检查你在$ http回调中得到的响应对象,它包含状态代码。

$http docs

function(response) {
    if (response.status == 200) { return true; }
}