2015-09-27 34 views
0

我在註冊控制器中的響應有問題。 由於某些原因,即使將用戶保存到數據庫中,結果始終也是註冊失敗。爲什麼發生這種情況。我有點新的angularjs - 春天,並不明白爲什麼會發生這種情況?Angularjs給出了錯誤的迴應

user.service.js

(function() { 
    'use strict'; 

    angular 
     .module('app') 
     .factory('UserService', UserService); 

    UserService.$inject = ['$http']; 
    function UserService($http) { 
     var service = {}; 

     service.Create = Create; 


     return service; 

     function Create(user) { 

      console.log(user.password) 
      console.log(user.lastName) 
      console.log(user.email) 
      console.log(user.firstName) 
      console.log(user.customfield) 

      return $http.post('/api/register', user) 
     } 

})(); 

而且register.Controller

(function() { 
    'use strict'; 

    angular 
     .module('app') 
     .controller('RegisterController', RegisterController); 

    RegisterController.$inject = ['UserService', '$location', '$rootScope' ]; 
    function RegisterController(UserService, $location, $rootScope) { 
     var vm = this; 

     vm.register = register; 

     function register() { 
      vm.dataLoading = true; 
      UserService.Create(vm.user) 
       .then(function (response) { 
        if (response.success) { 

         console.log("register Succeed") 

         //FlashService.Success('Registration successful', true); 
         $location.path('/home'); 

        } else { 

         console.log("register Failed") 
         vm.dataLoading = false; 
        } 
       }); 
     } 
    } 

})(); 

register.html

<div class="container" ng-controller="RegisterController as vm"> 
    <div class="col-md-6 col-md-offset-3"> 
     <h2>Register</h2> 
     <div ng-show="vm.error" class="alert alert-danger">{{vm.error}}</div> 
     <form name="form" ng-submit="vm.register()" role="form"> 


      <div class="form-group" ng-class="{ 'has-error': form.lastName.$dirty && form.lastName.$error.required }"> 
       <label for="lastName">Last name</label> 
       <input type="text" name="lastName" id="lastName" class="form-control" ng-model="vm.user.lastName" required /> 
       <span ng-show="form.lastName.$dirty && form.lastName.$error.required" class="help-block">Last name is required</span> 
      </div> 

      <div class="form-group" ng-class="{ 'has-error': form.firstname.$dirty && form.firstname.$error.required }"> 
       <label for="firstName">First name</label> 
       <input type="text" name="firstName" id="firstName" class="form-control" ng-model="vm.user.firstName" required /> 
       <span ng-show="form.firstName.$dirty && form.firstName.$error.required" class="help-block">First name is required</span> 
      </div> 


      <div class="form-group" ng-class="{ 'has-error': form.customfield.$dirty && form.customfield.$error.required }"> 
       <label for="customfield">Custom field</label> 
       <input type="text" name="customfield" id="customfield" class="form-control" ng-model="vm.user.customfield" required /> 
       <span ng-show="form.customfield.$dirty && form.customfield.$error.required" class="help-block">customfield is required</span> 
      </div> 

      <div class="form-group" ng-class="{ 'has-error': form.username.$dirty && form.username.$error.required }"> 
       <label for="email">Username</label> 
       <input type="text" name="email" id="email" class="form-control" ng-model="vm.user.email" required /> 
       <span ng-show="form.email.$dirty && form.email.$error.required" class="help-block">email is required</span> 
      </div> 


      <div class="form-group" ng-class="{ 'has-error': form.password.$dirty && form.password.$error.required }"> 
       <label for="password">Password</label> 
       <input type="password" name="password" id="password" class="form-control" ng-model="vm.user.password" required /> 
       <span ng-show="form.password.$dirty && form.password.$error.required" class="help-block">Password is required</span> 
      </div> 
      <div class="form-actions"> 
       <button type="submit" ng-disabled="form.$invalid || vm.dataLoading" class="btn btn-primary">Register</button> 
       <a href="#/login" class="btn btn-link">Cancel</a> 
      </div> 
     </form> 
    </div> 
</div> 

回答

2

根據the documentation

響應對象具有以下屬性:

  • data - {string | Object} - 使用轉換函數轉換的響應正文。
  • status - {number} - 響應的HTTP狀態碼。
  • 標題 - {function([headerName])} - 標題getter函數。
  • config - {Object} - 用於生成請求的配置對象。
  • statusText - {string} - 響應的HTTP狀態文本。

您正在測試response.success,這不是一個屬性的文件說存在。改用status

200到299之間的響應狀態代碼被認爲是成功狀態,並且將導致成功調用回調。

+0

你能舉例說明我可以如何使用if語句當用戶成功插入數據庫時​​。 – Greg

+0

以下是昆汀所提及的基本示例及其工作原理: http://jsbin.com/gogesajogi/edit?js,output – benfes

0

至於角度承諾成功的測試,您不需要檢查if語句。當時的承諾函數必須有參數(函數),第一個是調用成功,第二個是失敗,如下:

UserService.Create(vm.user) 
    .then(function(response) { 
    // this callback will be called asynchronously 
    // when the response is available, i.e. success 
    }, function(response) { 
    // called asynchronously if an error occurs 
    // or server returns response with an error status. 
    });