web-dev-qa-db-ja.com

AngularJSのhttp.getでリダイレクトを追跡する方法は?

私は、ソーシャルメディアを使用して人々がより健康的な生活を送れるように、コーチ向けのWebサイトに取り組んでいます。現在、フロントエンドにAngularJSを搭載したExpressJSサーバーでOAuthを介してTwitterへのアクセスに取り組んでいます。

AngularJSのウェブサイト から:

200〜299の応答ステータスコードは成功ステータスと見なされ、成功コールバックが呼び出されます。応答がリダイレクトの場合、XMLHttpRequestは透過的にそれに続きます。つまり、そのような応答に対してエラーコールバックは呼び出されません。

私のサーバーの完全なコードは、githubの web.js および Twitter.js にありますが、これは呼び出し元です。

function LoginCtrl($scope, $http, $location) {
  $scope.welcome = 'Sign in with Twitter';
  $http.defaults.useXDomain = true;    
  $scope.submit = function() {    
    $http({method: 'GET', url: '/sessions/connect'}).
    success(function(data, status) {
        $scope.welcome = data;
    });
  };
}

そしてこれはweb.jsの呼び出し先です:

app.get('/sessions/connect', function(req, res){
  consumer().getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, results){
    if (error) {
      res.send("Error getting OAuth request token : " + sys.inspect(error), 500);
    } else {  
      req.session.oauthRequestToken = oauthToken;
      req.session.oauthRequestTokenSecret = oauthTokenSecret;
      res.redirect("https://api.Twitter.com/oauth/authorize?oauth_token="+req.session.oauthRequestToken);      
    }
  });
});

tcpdumpで確認すると(すみません、私は古風です)、次のように表示されます。

Connection:.keep-alive....Moved.Temporarily..Redirecting.to.https://api.Twitter.com/oauth/authorize?oauth_token=***

もちろん、これは本当に素晴らしいことです。実際、このサーバーにアクセスすると発生します/sessions/connectブラウザで手動で。ただし、AngularJSを使用すると、ブラウザー画面は実際にはリダイレクトされません。何故なの?

9
Anne van Rossum

$http行って、ページのコンテンツを取得します。しかし、それはあなたに約束の結果を返します。あなたがそれを要求しない限り、それはあなたのページをまったく変えません。 thenハンドラーでは、ページをリダイレクトするために何かを行うことができます。ここにそれを行う方法の例があります: Angular POST からのエクスプレスリダイレクトを処理します

6
John Tseng