无法使用 $resource 和方法 'HEAD' 仅获取 AngularJS (v1.3.15) 中的 header

Can't get only the header in AngularJS (v1.3.15) using $resource and method 'HEAD'

在 Angular (v1.2.19) 中,我能够在工厂中做这样的事情:

myApp.factory('GetNumber', ['$resource',
  function($resource) {
    var get_headers = $resource('some/url', null, {
      get_number: {
        method: 'HEAD',
        transformResponse: function(data, headers) {                            
          var count = headers()['x-number'];
          return count;
        }
      }
    });
    return get_headers;
  }
]);

像这样从我的控制器调用它:

$q.all({
  'item1': GetNumber.get_number().$promise,
  'item2': SomeOtherService.get().$promise
})
.then(function(results) {
  $scope.newNumber = results.item1.value;
});

而且我可以取回自定义 header 而无需检索整个 header。

现在v1.3.15,不支持了。我可以在 Chrome 中看到 header,在 header 中看到 'x-number',但是如果我在 'var count' 行的 Chrome 中放置一个断点,我从来没有打过它(我确实用 v1.2.19 打过它)。

我已经验证使用 $http.head 是有效的,所以如果我的控制器中有这个:

$http.head('some/url')
    .success(function(data, status, headers, config) {
         var count =  headers()['x-number'];
         $scope.newNumber = count ? count : 0;
    });

我得到了我的作用域值。

我注意到没有很多人使用 http 'HEAD' 方法的例子,我想知道是否有我还没有通过搜索找到的原因?

我确实找到了这个 Whosebug 问题和答案 ,虽然我同意该声明,但我不希望请求 header 和 body 的开销。

有什么建议吗? 朱莉

感谢 Kevin 建议我使用错误处理程序。我应该想自己尝试一下,但我没有。

无论如何,这让我找到了问题的答案。要尝试捕获 $resource 中的错误,建议您使用拦截器。我以前从未使用过它们,我利用 AngularJS 文档 (https://docs.angularjs.org/api/ng/service/$http#interceptors) 并将我工厂中的代码更改为:

myApp.factory('GetNumber', ['$resource',
  function($resource) {
    var get_headers = $resource('some/url', null, {
      get_number: {
        method: 'HEAD',
        interceptor: { response: function(response) {
          var count = response.headers()['x-number']:
          return count ? count : 0;
        }, responseError: function(rejection) {
          console.log('rejection: ', rejection);
        }}
      }
    });
    return get_headers;
  }
]);

我仍然不确定为什么 transformResponse 停止工作,我现在需要使用拦截器,但很高兴我现在不必请求整个 body!

朱莉