不能使用$ resource和方法' HEAD'来获取AngularJS(v1.3.15)中的标题。

时间:2015-06-01 20:43:48

标签: angularjs http-headers ngresource

在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;
});

我可以在不必检索整个标题的情况下获取自定义标题。

现在在v1.3.15中,它不起作用。我可以在Chrome中看到带有' x-number'在标题中,但是如果我在Chrome中设置一个断点,那么' var count'我从来没有打过它(我确实用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'方法,我想知道是否有一个原因,我还没有通过搜索找到?

我确实发现这个StackOverflow问题并回答HTTP Get: Only download the header? (HEAD is not supported),虽然我同意该声明,但我并不想要请求标题和正文的开销。

有什么建议吗? 朱莉

1 个答案:

答案 0 :(得分:1)

感谢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停止工作,我现在需要使用拦截器,但我很高兴我现在不必请求整个身体!

朱莉