拦截器是注册到
$httpProvider 通过将它们添加到 $httpProvider.interceptors 数组。
调用工厂并注入依赖项(如果指定)
并返回拦截器。
intercepter 背后的基本思想是,它将在每个 $http 请求之前被调用,您可以使用服务来检查用户是否已登录并添加令牌或其他任何需要添加到标头中。您还可以为对每个 $http 请求的响应添加一些逻辑,例如根据状态代码处理响应。
以下是您如何在 Angular 中使用它来为每个 http 请求添加访问令牌。
angular.module('myapp')
.run(['$rootScope', '$injector', function($rootScope,$injector) {
$injector.get("$http").defaults.transformRequest = function(data, headersGetter) {
if (sessionService.isLogged()) {
headersGetter()['Authorization'] = "Bearer " + sessionService.getAccessToken();
}
if (data) {
return angular.toJson(data);
}
};
});
以下是响应拦截器的使用方法:
angular.module('myapp')
.factory('authHttpResponseInterceptor', function($q, $location, sessionService, $http) {
return {
response: function(response) {
//some logic here
return response || $q.when(response);
},
responseError: function(rejection) {
if (rejection.status === 401) {
//some logic here
}
return $q.reject(rejection);
}
}
});