0

node、express、および angular で実行されているアプリがあります。ユーザー プロファイル ページとログイン ページの 2 つのページがあります。ユーザーがサインオンしておらず、プロファイル ページに到達したときに、ログイン ページにリダイレクトするようにしたいと考えています。問題は、ノードでユーザーをリダイレクトしようとするたびに、Angular アプリが 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
4

1 に答える 1

3

302Express によって送り返されたものは、Angular が処理する前にブラウザーによって処理されます (そのため、インターセプターを作成することはできません)

解決策は、常に JSON オブジェクトを返し、Angular で確認できるプロパティを設定することです。

于 2013-07-14T17:50:46.480 に答える