$ http multiple transformRequests互相覆盖

时间:2015-07-11 15:45:10

标签: angularjs http service request transform

我使用此代码将用户的访问令牌注入到每个请求中:

$injector.get('$http').defaults.transformRequest = function(data, headersGetter) {
    if ($rootScope.auth.accessToken) {
      headersGetter()['access_token'] = $rootScope.auth.accessToken;
      return angular.toJson(data);
    } else {
      return angular.toJson(data); 
    }
  };

我的一个请求发送了一个文件,因此我必须先使用transformRequest修改服务中的请求(我假设)access_token转换,以确保Angular的默认transformRequest不会序列化FormDataContent-Typeundefined,以便Angular填充正确的边界。有关此功能的更多信息,请参见here

this.upload = function(file) {
    var fd = new FormData();
    fd.append('contacts', file);
    return $http.post(baseUrl + '/contacts/uploads', fd, {
      transformRequest: angular.identity,
      headers: {'Content-Type': undefined}
    });
  };

问题是当请求在服务(直接在上面)中转换时,access_token永远不会在请求离开之前由第二个转换(第一个代码块)添加该应用程序,意味着我对API的请求未经授权。我知道情况就是这样,因为如果我手动添加access_token,它就会起作用,如下所示:

this.upload = function(file) {
    var fd = new FormData();
    fd.append('contacts', file);
    return $http.post(baseUrl + '/contacts/uploads', fd, {
      transformRequest: angular.identity,
      headers: {'access_token': $rootScope.auth.accessToken, 'Content-Type': undefined}
    });
  };

如何在第一次转换后以编程方式使用转换添加access_token?为什么在第一次之后可以再次转换请求?

0 个答案:

没有答案