为什么不res.redirect实际上redirect我?

我有一个基本的login控制器的表单,更新用户的$范围。 当他们点击一个button时,login()函数被触发。

.controller('loginCtrl', ['$scope','$http',function($scope,$http) { $scope.user = { 'username' : "", 'password' : "" }; $scope.login = function(){ $http.post('/login', $scope.user).then(function (response){ console.log(response.data); }); } }]); 

这里是我的路由/login

 app.post('/login', function(req,res,next){ passport.authenticate('local-login', function(err, user, info){ if (err){ console.log(err); return next(err); } else if (!user){ return res.send(info); } else { req.logIn(user, function(err){ if (err){ return next(err); } else { return res.redirect('/view1'); } }); } })(req,res,next); }); 

这是我的护照local-login

 passport.use('local-login', new LocalStrategy({ passReqToCallback: true // Allows us to pass back the entire request to the callback function }, function (req, email, password, done){ // Checks database via mongoose ,function (err,user){ if (err){ return done(err); } else { if (!user){ return done(null, false, { message : 'No user found.'}); } else if (!user.validPassword(password)) { return done(null, false, { message : 'Incorrect password'}); } else { return done(null, user); } } }); })); 

这里的主要问题是,当我的路由逻辑触发res.redirect('/view1') ,控制器正在接收html页面作为response.data而不是实际被redirect。 ( $http.post().then(function (response){});

如果这是不正确的,我应该怎么处理用户成功login后redirect到/view1

       

网上收集的解决方案 "为什么不res.redirect实际上redirect我?"

当你从javascript调用后端的时候,你基本上会在场景后面进行ajax调用,而这些调用在redirect和其他HTTP头文件中不起作用。

为了将用户redirect到正确的页面,您必须检查来自后端的响应中的HTTP状态代码,并通过angular度将用户redirect到正确的站点。 这可能看起来像这样:

 if(response.status == 302) { $window.location.href = '/view1'; } 

或者不发送redirect,您可以从服务器发送状态更新,如:

 res.json({ success: true, redirectTo: '/view1' }); 

并parsing它在客户端上:

 if(response.data.success){ $window.location.href = response.data.redirectTo; }