response.redirect()在Express(NodeJS)中不起作用

时间:2018-07-18 07:56:50

标签: angularjs node.js express

如果用户名正确,我想从login.html重定向到dashboard.html,如果不正确,则会显示警报框,我同时使用了express response.redirect('path')或response.sendFile('path'),但是没有人在这里工作。 我将angularJs用作前端,并在后端表示nodeJs的模块。

快递路线代码:

    module.exports = function(app,db,path){
        app.post('/student-login', function (request, response) {
        var user = request.body;
        if(user.username == "abhinav")
        {   
            response.redirect('/views/dashboard.html');
            response.end();
        }
        else{
            response.send("Wrong username");
            response.end();
        }
   });
}

AngularJs代码:

angular.module('loginService',[])
.service('loginService',function($http){
        return {
            sendStudent : function(data){
            return $http.post('/student-login',data)
            .then(function(response){
                    return response.data;
                });
              }         
            }
});

AngularJs控制器代码:

if ($scope.myForm.$valid)
            loginService.sendStudent($scope.studentData)
            .then(function(data){
                if(data=="Wrong username")
                alert(data);
            });

开发人员选项>网络: enter image description here

1 个答案:

答案 0 :(得分:0)

正如您在 Network 标签中所看到的,浏览器确实向/views/dashboard.html路由发出了请求。这意味着重定向有效。无法获得预期行为的原因是,您需要导航到该页面(现在您只是在加载页面内容)。

我建议将重定向逻辑从Express转移到前端,并使用http状态代码表示登录错误。

快递代码:

module.exports = function(app,db,path){
    app.post('/student-login', function (request, response) {
    var user = request.body;
    if (user.username == "abhinav") {   
        response.sendStatus(200);
    } else {
        response.sendStatus(401);
    }
});
}

AngularJS控制器代码:

if ($scope.myForm.$valid) {
   loginService.sendStudent($scope.studentData).then(() => {
       // login successful, response status is 200
       location.href = '/views/dashboard.html'
   }).catch(response => {
       if (response.status === 401) {
           alert("Wrong username")
       } else { 
           alert("Some other error") 
       }
   })
}

我仅以location.href为例,因为我对angularjs路由不熟悉。它将重新加载整个页面,如果要避免这种情况,请使用angularjs路由器提供的API。