$ location.path()重定向并不总是在authHttpResponseInterceptor

时间:2016-03-07 20:32:04

标签: javascript angularjs angular-routing angular-http-interceptors

在我的Angular SPA中,我的authHttpResponseInterceptor定义如下:

app.factory('authHttpResponseInterceptor', ['$q', '$location', 'baseUrl', function ($q, $location, baseUrl) {
    return {
        response: function (response) {
            if (response.status === 401) {
                console.log('Response 401');
            }
            else if (response.status === 409) {
                $location.path('/sessionexpired');
            }
            return response || $q.when(response);
        },
        responseError: function (rejection) {
            if (rejection.status === 401) {
                window.location.href = baseUrl + 'Account/Logout';
            }
            else if (rejection.status === 409) {
                $location.path('/sessionexpired');
            }

            return $q.reject(rejection);
        }
    }
}]);

我将拦截器添加到我的$ httpProvider中,如下所示:

$httpProvider.interceptors.push('authHttpResponseInterceptor');

如果我从服务器获得409 HTTP状态,我想将位置更改为sessionexpired路径。出于某种原因,这只会偶尔发挥作用。

我定义了以下路线:

.when('/sessionexpired',
{
    controller: 'sessionExpiredController',
    templateUrl: baseUrl + 'Content/templates/409.html'
})
.when('/error',
{
    templateUrl: baseUrl + 'Content/templates/500.html'
})

我正在调试authHttpResponseInterceptor,因为它没有指向sessionexpired路线。它只是跨越$location.path()行,永远不会进入sessionExpiredController控制器,最终会出现在error页面上。

有什么想法吗?

0 个答案:

没有答案