Angularjs Express.Js使用角度Ajax调用重定向问题

时间:2014-03-03 11:14:48

标签: javascript node.js angularjs express angularjs-routing

我有从$ js到Express.js api的$ http pst ajax调用。在Express.js中,我使用节点的异步模块来进行代码的一些串行执行。如果没有问题,我想重定向到特定页面。因为如果我使用res.render('url')我正在从angular进行ajax调用,这不是重定向页面而是在angularjs上警告我。顺便说一句,我还有一个$ routeProvider上的角也:)。这是在重定向

后加载部分模板

角度AJAX POST CALL代码

app.controller('MainCtrl',function($scope,$http){
    $scope.loginForm=function(){
        alert($scope.username);
        $http.post('/login',{'name': $scope.username}).
        success(function(data) {
            alert(data);
        }).
        error(function(data) {
             alert(data);
        });
    }
});

Node.js(Express.js)api验证并进行重定向

app.post( '/登录',函数(REQ,RES){

var name= req.body.name;
//var password= req.body.password;
async.series([
    function (callback){
        var query= client.query('select count(*) as lgResult from Login where Email='+'"'+req.body.name+'"',function(err,result,field){
            if(err) return callback(err);
            if(result[0]['lgResult'] === 0){
                res.send('passwordWrong');
            }
            if(result[0]['lgResult'] === 1){
                callback(null, 'one');
            }

        });

    },
    function (callback){
        var query= client.query('select count(*) as lgResult from Login where Email='+'"'+req.body.name+'"',function(err,result,field){
            if(err) return callback(err);
            if(result[0]['lgResult'] === 0){
                res.send('passwordWrongSecondtime');
            }
            if(result[0]['lgResult'] === 1){
                 callback(null, 'two');
            }
        });
    }],
    function (err,results){
        if(err) {
            console.log(err);
            res.send('Something Broke sorry');
        }
        else{
            res.render('employelogin/employlogin');
        }
    });

});

角度路由:)

app.config(function($routeProvider, $controllerProvider,$compileProvider){
 app.registerCtrl = $controllerProvider.register;
  app.compileProvider    = $compileProvider.directive;
        $routeProvider
        .when('/employeeTimeSheet',{
            controller:'MainCtrl',
            templateUrl:'employeeTimeSheet.html'
        })
        .when('/employeeLogin',{
            templateUrl:'employeeDashboard.html'
        })
        .otherwise({redirectTo:'/employeeLogin'});

});

这里我的错误是什么

1 个答案:

答案 0 :(得分:1)

只是不要尝试处理一个HTTP请求中的所有内容。

  1. 在Express应用中使用res.send(200,'ok'); (或类似的东西)而不是res.render();这使得Angular运行.success()回调。
  2. res.send('Something broke')将触发Angular的成功回调,因为它默认发送200个HTTP代码,因此将错误状态代码添加到响应中。例如res.send(500,'Something broke');在这种情况下,Angular将运行.error回调。
  3. 在Angular成功回调中,重定向到所需页面,让Angular决定从服务器请求哪个视图。 (提示:$ location service非常有用{$ 3}}。$ location)
  4. 在您的成功回调中使用

    $location.path('/employeeTimeSheet');
    

    这将处理重定向。并且不要忘记向控制器注入$ location服务。