Nodejs回调响应无法按预期工作

时间:2017-09-02 17:27:53

标签: angularjs json node.js post callback

我正在尝试根据在给定表单中输入的值对用户进行身份验证。但是,使用res.send()后,即使密码和用户名正确,AngularJS控制器上的功能也无法正确重定向用户。我是否正确处理回调?

控制器

<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);

});


}

提前致谢!

2 个答案:

答案 0 :(得分:0)

您需要在控制器中注入$ window,然后在成功的响应中注入

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

答案 1 :(得分:0)

虽然使用$ window服务被认为是AngularJS的最佳实践,但我认为这不是问题所在。

您是否尝试了console.log() $ http电话的响应对象?

问题可能是因为您放了if(response.state)而不是if(response.data.state)