Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点、express和angular的重定向问题_Javascript_Node.js_Angularjs_Express - Fatal编程技术网

Javascript 节点、express和angular的重定向问题

Javascript 节点、express和angular的重定向问题,javascript,node.js,angularjs,express,Javascript,Node.js,Angularjs,Express,我有一个应用程序在node、express和angular中运行。它有两个页面,一个用户配置文件页面和一个登录页面。我想这样做,如果用户没有登录,并且当到达配置文件页面时,我会将您重定向到登录页面。问题是,每次我尝试重定向节点中的用户时,Angular app都没有收到302重定向调用(即使我没有发送任何200条状态消息响应,响应也总是200条)。感谢您的帮助。这是我的密码: 节点js: // serve index and view partials app.get('/', routes.i

我有一个应用程序在node、express和angular中运行。它有两个页面,一个用户配置文件页面和一个登录页面。我想这样做,如果用户没有登录,并且当到达配置文件页面时,我会将您重定向到登录页面。问题是,每次我尝试重定向节点中的用户时,Angular app都没有收到302重定向调用(即使我没有发送任何200条状态消息响应,响应也总是200条)。感谢您的帮助。这是我的密码:

节点js:

// serve index and view partials
app.get('/', routes.index);
app.get('/partials/:name', routes.partials);

//authentication
app.post('/login', auth.login);
app.get('/logout', auth.logout);
app.get('/user', auth.getCurrentUser);
...
function getCurrentUser (req, res) {
  var user = req.user;
  if (user && user.username) {
    console.log("getCurrentUser succeeded on user "+ user);
    res.json({
      username: user.username
    });
  } else {
    console.log("getCurrentUser failed")
    res.redirect('/login');
  }
}
...
//routes in node
exports.index = function(req, res){
  console.log("rendering index page");
  res.render('index');
};

exports.partials = function (req, res) {
  var name = req.params.name;
  res.render('partials/' + name);
};
角度:

 when('/login', {
    templateUrl: 'partials/login',
    contorller: LoginCtrl
  }).
  ...
  when('/user', {
    templateUrl: 'partials/user',
    controller: UserCtrl
  })

function UserCtrl($scope, $http, $location, $routeParams) {
  $http.get('/user').
    success(function(data, status, headers){
    console.log("/user succeeded with status "+status);
      //redirect the user
      if (status == 302){
        console.log("302 received, redirecting user to "+headers().location);
        $location.path(headers.location);
      }

      console.log("CLIENT : "+data.username);
      $scope.username = data.username;
    });

};
到达/user页时服务器上的输出:

getCurrentUser failed
GET /user 302 8ms - 40b
rendering index page
GET /login 304 80ms
rendering index page
客户端上的输出:

/user succeeded with status 200

Express发回的
302
在Angular还没拿到它之前就已经由浏览器处理了(所以你不能为它创建一个应用程序)


一个解决方案是始终返回一个JSON对象,并在其上设置一些属性,以便您可以在Angular中进行检查。

由Express返回的
302
在Angular得到它之前由您的浏览器处理(因此您无法为它创建一个属性)

一个解决方案是始终返回一个JSON对象,并在其上设置一些属性,以便在Angular中进行检查