如何使用spring boot检查邮箱是否已经在angularjs中存在



我想我几乎找到了解决问题的方法,但我仍然需要一点调整。

我有一个@RestController,我这样做是为了检查用户是否存在

@RequestMapping(value = "/email")
public Boolean getByEmail(@RequestBody String email) {
    String userId;
    try {
        User user = userDao.findByEmail(email);
        userId = String.valueOf(user.getId());
        LOGGER.info(user.toString());
        LOGGER.info(userId);
    }
    catch (Exception ex) {
        LOGGER.info("email does not exist");
        return false;
    }
    LOGGER.info("Email does exist");
    return true;
}

在AngularJs中,我这样做了:

(function () {
    'use strict';
    angular
        .module('app')
        .controller('RegisterController', RegisterController);
    RegisterController.$inject = ['UserService', '$http' ];
    function RegisterController(UserService, $http) {
        var vm = this;
        vm.register = register;
        vm.error="This is a sample Error";
        function register() {
            testEmail();
            console.log(vm.user)
            console.log(("email must been verified before this"))
            //if the testEmail returns false Create a user else give an error
           // vm.dataLoading = true;
           // UserService.Create(vm.user)
        }
        function testEmail(){
            console.log("Check email")
            console.log(vm.user.email)
            console.log($http.post('/email',vm.user.email))
            return $http.get('/email',vm.user.email)
        }
    }
})();

我基本上想做的是找到一种方法,使testEmail函数返回truefalse ?

我建议像其中一个评论所说的那样研究异步验证器,但是如果你不喜欢这个选项,这里有一些更多的信息。

问题在于,由于testEmail函数发出异步ajax请求,因此调用之后的代码行将在ajax请求完成之前运行。您需要等待,直到请求完成。请看下面的例子:

    function register() {
        //test email returns a promise object, you need to wait until it is resolved, passing the response from the server to the callback
        testEmail().then(function(response){
            //replace this with the appropriate response
            if(response.data.valid){
                console.log(vm.user)
                console.log(("email must been verified before this"))
                //if the testEmail returns false Create a user else give an error
                // vm.dataLoading = true;
                // UserService.Create(vm.user)
            }
        });
    }

下面是一个使用异步验证器的例子:

<标题> 形式
<form name="form" ng-submit="!form.$pending && form.$valid && vm.register()">
  <label>Email</label>
  <input ng-model="vm.user.email" email-not-used ng-model-options="{ debounce: 500 }" type="text" name="email" />
  <div ng-messages="form.email.$error">
    <div ng-message="emailNotUsed">User with this email already exists.</div>
  </div>
</form>

有几点需要注意:

  • !form.$pending && form.$valid && vm.register():这基本上确保您只能在表单有效且没有验证等待(因为异步验证)的情况下提交表单(使用vm.register()注册用户)。
  • ng-model-options="{ debounce: 500 }:这确保验证不会在每次按键时被调用,而是在最后一次按键后500毫秒,没有其他活动
  • email-not-used是下一步
  • 中定义的异步验证指令。
  • ngMessages用于显示错误信息
  • 理想情况下,您应该添加电子邮件格式验证,检查电子邮件是否为空等。为了使示例更简单,我省略了它们
<标题> JavaScript h1>

最新更新