angularjs - app.config 中的 Angular 多个拦截器

标签 angularjs interceptor

在我的 Angular 应用程序中,我想向外部 API 的所有调用添加信息。

为此,我使用从 app.config 中调用的拦截器。

app.config(['$httpProvider', ... , function($httpProvider, ...){      
    $httpProvider.interceptors.push('globalInterceptorService');
    $httpProvider.interceptors.push('authInterceptorService');
}]);

当我只使用一个拦截器时,它工作得很好。但是当我使用其中两个(如上例所示)时,其中一个的操作会被另一个覆盖。

知道如何处理多个拦截器吗?也许建议只拥有 1 个?非常感谢任何帮助。

拦截器1:

function globalInterceptorService ($q, localStorageService) {

  var service = {};

  var _request = function (config) {

    config.headers = config.headers || {};

    var AreaId = localStorageService.get('AreaId');
    if (AreaId) {

      config.headers.AreaId = 'AreaId ' + AreaId;

    }

    return config;
  };

  service.request = _request;

  return service;
}

拦截器2:

function authInterceptorService ($q, $location, localStorageService) {

  var service = {};

  var _request = function (config) {

    config.headers = config.headers || {};

    var authData = localStorageService.get('authorizationData');
    if (authData) {
      config.headers.Authorization = 'Bearer ' + authData.token;
    }

    return config;
  };

  service.request = _request;

  return service;
}

最佳答案

我认为你应该推送函数,而不是它的字符串名称。

function globalInterceptorService($q, localStorageService){...}
$httpProvider.interceptors.push(globalInterceptorService);

示例:http://jsfiddle.net/aartek/tbhobfbu

或者

function globalInterceptorService($q, localStorageService){...}
$provide.factory('globalInterceptorService',globalInterceptorService)
$httpProvider.interceptors.push('globalInterceptorService');

示例:http://jsfiddle.net/aartek/tbhobfbu/2/

documentation 中有很好的描述。

关于angularjs - app.config 中的 Angular 多个拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30868590/

相关文章:

javascript - Angular 2 将输入绑定(bind)到函数调用

java - Spring mvc 拦截器异常

java - Spring 应用程序中不会调用 Hibernate 拦截器

Java Spring 在处理之前更改响应

javascript - Ionic/AngularJS 重定向到另一个页面

javascript - 在我的案例中如何获取复选框值

javascript - AngularJs - 带有ajax加载的模态窗口

javascript - Kendo 数字文本框最小最大值不起作用

java - 如何从传出拦截器的消息中获取 REST 服务的响应负载?

javascript - 刷新 token 拦截器 ionic 时捕获错误