2017-09-02 23 views
0

私は、指定されたフォームに入力された値に基づいてユーザーを認証しようとしています。ただし、res.send()を使用した後、AngularJSコントローラの機能は、パスワードとユーザー名が正しい場合でもユーザーを正しくリダイレ​​クトできません。コールバックを正しく処理していますか?Nodejコールバック応答が期待通りに機能しない

コントローラ

<script> 
var app = angular.module('myApp', []); 

app.controller("loginController", function($scope,$http) { 
    $scope.sub = function() { 

    var config = { 
      headers : { 
       'Content-Type': 'application/x-www-form- 
    urlencoded;charset=utf-8;' 
      } 
     } 

    $http.post('/login', { data:{ username: $scope.username, 
     password: $scope.password} }) 
     .then(function(response){ 
      if(response.state==0){ 
       console.log('Error!'); 
      } else if(response.state==1){ 
    console.log('action on success'); 
    window.location.href = '/views/success.html';} 
    }).catch(function(error){ 
    console.log('action on error'); 
    }); 

認証

var db = require('../../config'); 

exports.login = function(req,res){ 

var username = req.body.data.username; 
var password = req.body.data.password; 

db.query('SELECT * FROM users WHERE username = ?',[username], function 
(error, results, fields){ 
var result = "0"; 
if(error) { 
console.log('Code 400, Error ocurred'); 
} 

else{ 

    if(results.length>0){ 

    if(results[0].password == password){ 
     console.log('Code 200, login sucessful'); 
    res.json({ state : 1}); 

    } 
    } 
else{ 
    console.log('Code 400, Password or username invalid'); 
res.json({ state: 0}) 
    } 
} 

}); 
} 

server.js

var express = require('express'); 
var bodyParser = require('body-parser'); 
var morgan = require('morgan'); 
var db = require('./config'); 
var app = express(); 

app.use(bodyParser.urlencoded({extended:true})); 
app.use(bodyParser.json()); 
app.use(morgan('dev')); 

app.use(express.static(__dirname + '/app')); 
require('./app/routes')(app); 


app.listen(3000,function(err){ 

if(err){ 

console.log(err); 
} 
else{ 

console.log("Listening on port 3000"); 
} 

}); 

Route.js事前に

var auth = require('../app/middleware/authenticateUser'); 

module.exports = function (app) { 


app.get('/',function(req,res){ 

res.sendFile(__dirname + '/views/index.html'); 


}); 

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


auth.login(req,res); 

}); 


} 

ありがとう!

+0

'state'は' response'オブジェクトのプロパティではありません。詳細については、[AngularJS $ httpサービスAPIリファレンス - 一般的な使用法](https://docs.angularjs.org/api/ng/service/$http#general-usage)を参照してください。 – georgeawg

+0

これはプログラミングウェブサイトであり、 "debug my broken code"ウェブサイトではありません。デベロッパーコンソールの使用方法を学びます。単純な 'console.log(応答)'は問題を示します。 'console.log(response.status)'と 'console.log(response.data)'の結果を返します。 – georgeawg

答えて

0

あなたは問題がある場合、私はこれがあるとは思わない、$窓サービスはベストプラクティスAngularJSを考えられている使用しますが、あなたの成功の応答

$window.location.href = '/views/success.html'; 
0

で、あなたのコントローラで$ウィンドウを注入し、する必要があります。

console.log() $ httpコールの応答オブジェクトを試しましたか?

おそらくif(response.data.state)の代わりにif(response.state)を入力したことが原因です。

関連する問題