Не удается получить только заголовок в AngularJS (v1.3.15), используя $resource и метод '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;
});

И я мог бы вернуть пользовательский заголовок, не извлекая весь заголовок.

Теперь в версии 1.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 скачать шапку? (HEAD не поддерживается), и хотя я согласен с утверждением, я не хочу накладных расходов на запрос заголовков и тела.

Любые предложения, пожалуйста? Джули


person JulieMarie    schedule 01.06.2015    source источник
comment
Добавьте обработчик ошибок, скорее всего, он вызывается с дополнительной информацией о том, почему он не работает.   -  person Kevin B    schedule 01.06.2015
comment
Спасибо, Кевин... Я попробую!   -  person JulieMarie    schedule 02.06.2015


Ответы (1)


Спасибо Кевину за предложение использовать обработчик ошибок. Я должен был подумать о том, чтобы попробовать это сам, но я не стал.

Во всяком случае, это привело меня к ответу на мою проблему. Чтобы попытаться поймать ошибку в $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 перестал работать, и теперь мне нужно использовать перехватчик, но я очень рад, что теперь мне не нужно запрашивать все тело!

Джули

person JulieMarie    schedule 02.06.2015