角度响应拦截器不重定向

时间:2015-10-13 17:09:44

标签: javascript angularjs

我正在设置一个全局响应拦截器来处理重定向错误。问题是该页面没有使用ErrorCtrl,也没有地址栏反映该位置已被更改。这是工厂:

famaApp.factory('responseObserver', function responseObserver($q, $location) {
    return {
        'responseError': function(errorResponse) {
            $location.path('/error/' + errorResponse.status);
            return $q.reject(errorResponse);
        }
    };
});

在app.config中被推入$ httpProvider的拦截器:

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

我检查了一个特定服务中的路径,该路径被调用如下:

AuthenticationService.authenticate($scope.credentials, function(success) {
    if (success) {
        ...
    } else {
        console.log($location.url());
        ...
    }
});

$ location.url()是正确的,/ error / 502。知道我在这里做错了吗?

编辑:

我已经更新了我的代码,但它仍然无效。这是我的新配置:

app.config(['$routeProvider', '$httpProvider',
        function($routeProvider, $httpProvider) {
    $httpProvider.interceptors.push(function ($q, $location) {
        return {
            responseError: function (response) {
                $location.path('/error/' + response.status);
                return $q.reject(response);
            }
        };
    });
    ...
}]);

不幸的是问题仍然存在。

2 个答案:

答案 0 :(得分:2)

尝试直接在app模块配置中添加拦截器中的“responseError”。它对我有用!

var app = angular.module('yourAppName', []);
app.config(function ($httpProvider) {
    $httpProvider.interceptors.push(function ($q, $location) {
        return {
            responseError: function (response) {
                $location.path('/error/' + response.status);
                return $q.reject(response);
            }
        }
    }
});

没有必要验证响应。

AuthenticationService.authenticate($scope.credentials, function(success) {
    if (success) {
        ...
    } else {
        console.log($location.url());
        ...
    }
});

第三个参数是回调错误。使用“$ q.reject”拒绝回复时执行。

AuthenticationService.authenticate($scope.credentials, function (response) {
    /**
     * Success response
     */
}, function (response) {
    /**
     * Error response
     */
});

答案 1 :(得分:0)

删除

return $q.reject(response);

解决了这个问题。

相关问题