2016-08-16 3 views
0

私はログインフォームをしようとしています。私はangularjsのng-submitを使用しています。送信ボタンをクリックすると、urlを変更せずにpostメソッドをサーバーで呼び出すようにします。投稿を送信して、URLを変更せずに表現してください。

expressのpostには、応答するURLが必要です。ログイン画面のURLがhttp://localhost:2000/loginで、送信がクリックされた場合、postが同じURLのhttp://localhost:2000/loginに呼び出されます。

$httpurlキーを使用する方法がわかりません。

ログインHTML:

<form ng-controller="loginController" ng-submit="loginFunc()"> 
<input type="text" name="" ng-model="login"> 
<input type="password" ng-model="password" name=""> 
<input type="submit" value="login" name=""> 

コントローラ:

.controller('loginController', function($scope, $http) { 
    $scope.login = "" 
    $scope.password = ""; 
    $scope.loginArray = []; 
    $scope.loginFunc() { 
    $scope.loginArray.push($scope.login); 
    $scope.loginArray.push($scope.password); 
    $http({ 
     method: 'POST', 
     url: 'loginClick', 
     data: $scope.loginArray 
    }) 
    } 
}) 

server.js:

app.get('/login', function(request, response) { //the file sent when /login is requested 
    response.sendFile(__dirname + "/staticFolder/view/login.html"); 
}) 

app.post('/loginCheck', function(request, response) { //call this when submit button is clicked without change in url 
    console.log(JSON.stringify(request.body) + "req"); 
}) 
+0

何かエラーがありますか? – vkstack

答えて

0

ではなくarray.Itのように、送信の対象としてログイン情報を送信してみてください、あなたの人生が容易になります。

.controller('loginController', function($scope, $http) { 
    $scope.loginFunc() { 
     $http({ 
       method: 'POST', 
       url: '/loginCheck', //not loginClick make sure you have a route to handle this. 
       data: { 
        login: $scope.login, 
        password: $scope.password 
       } 
      }) 
      .then(function(response) { 
       //Success handling 
      }, function(err) { 
       //Error handling 
      }); 
    } 
}) 

あなたはそれぞれ、すべてのルートに応答しなければならない

編集1つの 使用のバックエンドとして:が異なるHTTP動詞(getpost

と同じURL /loginを使用します
app.get('/login', function(request, response) { //the file sent when /login is requested 
    response.sendFile(__dirname + "/staticFolder/view/login.html"); 
}); 
app.post('/login', function(request, response) { //call this when submit button is clicked without change in url 
    console.log(JSON.stringify(request.body) + "req"); 
    /* 
    below will be the logic for handling your interest. 
    */ 
    someIOCall(function Handler(err,resultJson){ 
    if(err) 
     return res.status(500).end(); 
    res.status(200).end(resultJson) 
    })  
}) 

それはシナリオで動作するはずです。

+0

誰も私の問題を理解していないと思います。私がlogin.htmlを表示したいとき、URLは '../ login.html'です。ログインボタンをクリックすると 'post'メソッドが呼び出されます。 'post'メソッドにはurlが必要です。私は同じURLに滞在したいので、そのURLを指定する必要はありません。ポストメソッドは同じに応答する必要があります – Nobody

+0

1.ログインフォームをレンダリングするには、URLは '/ login'にする必要があります。あなたがAJAXのリクエストをした場合は、あなたが取得したデータを処理する必要があります。 そして達成したいものを正確に共有してください。 – vkstack

0

あなたはオブジェクトとしてPOSTデータを送信する必要があり、明示的でない場合は配列としてではなく、dどのパラメータがどの値を持っているかは実際にはわかりません。

また、 'loginClick'のような文字列はURLとして機能しません。ポートを絶対URLを指定しようとしない場合は、あなたがに転記する場合

など、

$scope.loginFunc = function(){ 
     $http({ 
      method:'POST', 
      url:'/login', 
      data: { 
       login: $scope.login, 
       password: $scope.password 
      } 
     }) 
    } 

ない100%必ず「/ログインは」URLのために十分です。

のような何かを試してみてください「/ログイン」、あなたは同様にあなたの明示ルートを調整する必要があります:

app.post('/login', function(request,response) { 
    console.log(JSON.stringify(request.body)+"req"); 
}) 
+0

私が最初にログイン画面を表示すると、リクエストはサーバに送られ、 'app.post'でリクエストパラメータを探します。私は、ログインボタンをクリックしてログインを確認するときにだけそれをしたいです。 – Nobody

+0

ありがとうございました。 – Nobody

関連する問題