0

我的服务看起来像

//this mthod under myService
this.checkCookie = this.getAuthorization = function() {
    return $http({
        method: 'GET',
        url: '/api/auth'
    });
}

在我的路线配置中,我正在做

MyAPP.config(function($routeProvider) {
    $routeProvider.
    when('/', {
        controller: check
    }).

    when('/login', {
        templateUrl: '/partials/login.html',
        controller: check


    }).
    when('/products', {
        templateUrl: '/partials/products.html'
    })
});

var check = function($location, myService, $q) {
        if (myService.checkCookie()) {
            $location.path("/products");
        } else {
            $location.path("/login");
        }
    };

通过获取请求,我想检查服务器生成的会话数据是否有效。浏览器会在发送 '/api/auth' 中的 'GET' 时发送 cookie 信息。

问题是当我调用 this.checkCookie 时,我没有得到响应同步,因为角度以 asnyc 方式返回响应。根据 checkCookie 响应,我想重定向到“/products”,但我现在不能这样做。

我怎样才能做到这一点?我需要更改什么来获取 this.checkCookie 并检查响应状态是 200 还是 500?

4

2 回答 2

0

您不能使用$http. 要处理请求返回的承诺,您可以这样做:

var check = function($location, myService, $q) {
  myService.checkCookie()
   .success(function() {
     $location.path("/products");
   })
   .error(function() {
     $location.path("/login");
   })
};
于 2013-08-30T15:46:27.903 回答
0

您必须调用从以下then位置返回的承诺$http

myService.checkCookie().then(function () {
    $location.path("/products");
}, function () {
    $location.path("/login");
});

第一个函数是成功处理程序,第二个是错误(拒绝)处理程序。

于 2013-08-30T15:46:35.293 回答