2016-01-21 69 views
2

im angularJs中的新功能,即時嘗試使用angularJS和nodejs(服務器端)進行基本登錄,現在我不在乎安全性,只是試圖學習如何發佈。所以我做了一個登錄表單,並用角控制器:將angularjs發佈到nodejs Express(Bad request)

我的登錄表單:

<div class="col-md-4"> 
     <h1>Login</h2> 
     <form class="form" > 
     <div class="form-group"> 
      <label>Username</label> 
      <input type="email" class="form-control" ng-model="login.mail" required> 
     </div> 
     <div class="form-group"> 
      <label>Password</label> 
      <input type="password" class="form-control" ng-model="login.password" required> 
      </div> 
      <div> 
      <button type="text" class="btn btn-default" ng-click="login()">Login</button> 
      </div> 
     </form> 
    </div> 

然後我的路由器&控制器Angularjs:

'use strict'; 

angular.module('login', ['ngRoute']) 

.config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/login', { 
     templateUrl: 'views/login.html', 
     controller: 'loginCtrl' 
    }); 
}]) 

.controller('loginCtrl', ['$scope', '$http', function ($scope, $http) { 
     $scope.login = function() { 

      $http.post('/api/users/login', $scope.login).success(function (response) { 
       console.log(response); 
//    refresh(); 
      }); 
     }; 

}]); 

和服務器端我有:

router.post('/login/', function(req, res) { 

// here "/login/" means "https://stackoverflow.com/users/login" (in index of controllers) 

    console.log(req.body.mail); 

var usermail = req.body.mail; 
var pass = req.body.password; 
console.log(usermail + pass); 



User.find({mail: usermail}, function(err, user) { 
     if (err) { 
      res.send(err); 
      console.log("ça marche pas") 


     } else { 

      res.json(user); 
      console.log(user); 
     } 
    }) 


}); 

服務器端:它的工作原理(當我使用DHC鉻擴展早報),但是當使用im angularjs查看我得到這個錯誤:

POST http://localhost:3000/api/users/login 400(錯誤請求)

請幫我解決這個問題,我想我錯過了什麼。先謝謝你。

回答

1

我想你發送你的登錄功能,如下行:

$http.post('/api/users/login', $scope.login) 

你可能想傳遞你的登錄功能的參數可以被髮送到服務器,如下:

$scope.login = function(loginData) { 

    $http.post('/api/users/login', loginData).success(function (response) 

更新

您正在將表單值分配給$ scope.login。如果你想爲它創建一個單獨的變量,例如登錄表單,您可以將這個作爲有效的JSON到您的API:

<div class="col-md-4"> 
    <h1>Login</h2> 
    <form class="form" > 
    <div class="form-group"> 
     <label>Username</label> 
     <input type="email" class="form-control" ng-model="loginForm.mail" required> 
    </div> 
    <div class="form-group"> 
     <label>Password</label> 
     <input type="password" class="form-control" ng-model="loginData.password" required> 
     </div> 
     <div> 
     <button type="text" class="btn btn-default" ng-click="login(loginData)">Login</button> 
     </div> 
    </form> 
</div> 

和.js:

.controller('loginCtrl', ['$scope', '$http', function ($scope, $http) { 
     $scope.loginForm = { 
      mail: '', 
      password: '' 
     }; 

     $scope.login = function(loginData) { 
      // Check what this prints out: 
      console.log(loginData); 
      $http.post('/api/users/login', loginData).success(function (response) { 
       console.log(response); 
//    refresh(); 
      }); 
     }; 

}]); 
+0

我只是想發送到電子郵件和密碼計算在我的服務器的登錄表單,我確定我的控制器不工作:現在我試着用你的表達它給了我一個404錯誤 我忘記告訴你,我有不好的請求400,並在服務器端:無效json – AmenzO

+0

您將不得不調試自己正在發送到服務器的內容。如果您使用瀏覽器開發工具(F12)。您可以觀看發送到您的API的內容。然後,您可以檢查您發送的JSON是否有效(例如,在本網站上:http://json.parser.online.fr/)。 –

+0

我已經更新了我的答案,它顯示瞭如何改進您的代碼。你有一個函數$ scope.login,你可以指定你的變量。 –