9

我正在开发一个教练网站,通过使用社交媒体帮助人们过上更健康的生活。目前,我正在使用前端的 AngularJS 在 ExpressJS 服务器中通过 OAuth 访问 Twitter。

来自AngularJS 的网站

200 到 299 之间的响应状态代码被视为成功状态,将导致调用成功回调。请注意,如果响应是重定向,则 XMLHttpRequest 将透明地跟随它,这意味着不会为此类响应调用错误回调。

我的服务器的完整代码可以在 github 上的web.jstwitter.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,我的浏览器屏幕实际上并没有被重定向。为什么不?

4

1 回答 1

7

$http去为你获取页面的内容。但是,它会在承诺中为您提供结果。除非您要求,否则它根本不会更改您的页面。在您的then处理程序中,您可以做一些事情来重定向您的页面。这里有一个如何做到这一点的例子:Handle an express redirect from Angular POST

于 2013-07-06T02:11:53.227 回答