2015-09-19 60 views
0

我正在嘗試在Angular中創建新用戶。我試圖通過客戶端發送POST請求到我的api來創建一個新用戶。很遺憾,我無法成功發送發佈請求。通過Postman發送請求是成功的,但不是通過Angular。任何想法可能是什麼問題?任何幫助表示讚賞。無法在Angular上創建新用戶註冊頁面

userCtrl.js

//./public/app/controllers/userCtrl.js 

angular.module('userCtrl',['userService']) 

    //SIGN UP CTRL ================================ 
    //inject the User factory 
    .controller('userCreateController', function($location, User){ 
    var vm = this; 

    //Function that creates a new user 
    vm.saveUser = function(){ 
     //For spinner animation when signing up 
     vm.processing = true; 

     //Use the create funciton in the userService 
     User.create(vm.userData) 
     .then(function(data){ 
      if(data.success){ 
      $location.path('/login'); 
      }else { 
      console.log('error'); 
      vm.processing = false; 
      } 
     }) 
    }//End saveUser 

    })//End userCreateController 

userService.js

//userService.js 

angular.module('userService', []) 

    .factory('User', function($http){ 
    //create a user factory object 
    var userFactory = {}; 

    //get a single user 
    userFactory.get = function(id){ 
     return $http.get('/api/users/' + id); 
    }; 

    //get all users 
    userFactory.all = function(){ 
     return $http.get('/api/users/'); 
    }; 

    //create a user 
    userFactory.create = function(userData){ 
     return $http.post('/api/users/', userData); 
    }; 

    //update a user 
    userFactory.update = function(id, userData){ 
     return $http.put('/api/users/' + id, userData); 
    }; 

    //delete a user 
    userFactory.delete = function(id){ 
     return $http.delete('/api/users' + id); 
    }; 

    //return userFactory object 
    return userFactory; 

    }); 

routes.js

//./public/app/routes.js 

angular.module('appRoutes', ['ngRoute']) 
    .config(function($routeProvider, $locationProvider){ 
    $routeProvider 

    //homepage route 
    .when('/',{ 
     templateUrl : 'app/views/pages/home.html' 
    }) 

    .when('/login',{ 
     templateUrl: 'app/views/pages/login.html', 
     controller: 'mainController', 
     controllerAs: 'login' 
    }) 

    .when('/signup',{ 
     templateUrl: 'app/views/pages/signup.html', 
     controller: 'userCreateController', 
     controllerAs: 'signup' 
    }) 

    //Remove hash in the Url 
    $locationProvider.html5Mode(true); 
    })//End config 

signup.html

<div class="row col-sm-6 col-sm-offset-3"> 
    <div class="jumbtron"> 
    <h1>Sign Up</h1> 

    <!-- Sign Up Form --> 
    <form ng-submit='signup.saveUser()'> 

     <!-- Name Input --> 
     <div class="form-group"> 
     <label>Name</label> 
     <input type="text" class="form-control" placeholder="Enter Your Name" ng-model='signup.userData.name'> 
     </div> 

     <!-- Username Input --> 
     <div class="form-group"> 
     <label>Username</label> 
     <input type="text" class="form-control" placeholder="Enter Username" ng-model='signup.userData.username'> 
     </div> 

     <!-- Password Input --> 
     <div class="form-group"> 
     <label>Password</label> 
     <input type="password" class="form-control" placeholder="Enter Password" ng-model='signup.userData.password'> 
     </div> 


     <!-- Signup Button --> 
     <button type="submit" class="btn btn-block btn-success"> 
     <!-- Show SignUP --> 
     <span ng-if="!signup.processing">Sign Up</span> 
     <!-- Show spinner animation when signing up --> 
     <span ng-if="signup.processing" class="spinner"> 
      <span class="glyphicon glyphicon-repeat"></span> 
     </span> 
     </button> 

    </form> 
    <!-- End Sign Up Form --> 
    </div> 

</div> 
+0

該帖子甚至沒有發佈,或者你從帖子中得到錯誤? – Gustav

+0

@Gustav帖子根本沒有發送。它應該將用戶重定向到登錄頁面,但是當輸入字段被填充並且用戶點擊提交時,頁面將停留在註冊頁面上。在我的服務器端,我在POST/api/users上獲得了200的狀態。但用戶不在我的數據庫中。 –

+0

您應該知道$ http將返回一個響應對象,其中包含您從後端返回的數據屬性。所以我猜'.success'是你返回的對象上的一個屬性,你需要做'data.data.success',因爲它不存在於$ http響應對象 – Gustav

回答

0

這是很難不更像是瀏覽器的控制檯日誌信息說,但如果你是涅槃的代碼,它可能是由於在控制器注射使用的implicit annotation語法。

嘗試將其與優選嵌入式陣列註釋喜歡寫:

.controller('userCreateController', 
    ['$location', 'User', function($location, User){ 
     ... 
}]); 
+0

我相信[my其他響應](http://stackoverflow.com/a/32672585/4928558)更有可能猜到這個問題。 – atfornes

0

signup.html要修改signup.userData.*userCtrl.js您發送vm.userData而不是$scope.signup.userData

問題可能是您發送的是未定義的對象而不是userData對象。

+0

在我的路線中,我聲明瞭userController的別名作爲註冊。這似乎不是問題,因爲我剛剛檢查了我的數據庫,它實際上給了我成功的帖子。不知道這個問題是什麼,但它的工作中途。由於某種原因,現在它不會將我重定向到登錄頁面...... –