Как получить доступ к заголовкам ответов с использованием $resource в Angular?

Я в основном вызываю get запросы следующим образом:

var resource = $resource('/api/v1/categories/:id')

resource.get({id: 1}).$promise.then(function(data){
  console.log(data)
})

Это отлично работает... но как мне получить заголовки ответов?

Ответы

Ответ 1

Вы можете использовать действие transformResponse указанное здесь, это позволит добавлять заголовки

$resource('/', {}, {
    get: {
        method: 'GET',
        transformResponse: function(data, headers){
            response = {}
            response.data = data;
            response.headers = headers();
            return response;
        }
    }

См. рабочий пример здесь JSFiddle

Ответ 2

Ответ на

@Martin работает для тех же запросов домена. Поэтому я хотел бы добавить к его ответу, что если вы используете запросы кросс-домена, вам придется добавить еще один заголовок с Access-Control-Expose-Headers: X-Blah, X-Bla вместе с заголовком Access-Control-Allow-Origin:*.

где X-Blah и X-Bla являются настраиваемыми заголовками.

Также вам не нужно использовать запрос преобразования для получения заголовков. Вы можете использовать этот код:

var resource = $resource('/api/v1/categories/:id')

resource.get({id: 1}, function(data, headersFun){
  console.log(data, headersFun());
})

Смотрите этот скрипт. Надеюсь, это поможет!!!

Ответ 3

Старый вопрос, но я думаю, что стоит упомянуть о будущей ссылке. В документации angular есть "официальное" решение:

Стоит отметить, что обратный вызов успеха для get, query и других методы передаются в ответ, который также поступает с сервера как функция HTTP-заголовка getter, поэтому можно переписать выше пример и получить доступ к http-заголовкам как:

var User = $resource('/user/:userId', {userId:'@id'});

var users = User.query({}, function(users, responseHeaders){
  // ...
  console.log(responseHeaders('x-app-pagination-current-page'));
});

(код из документов слегка обновлен для ясности)

Для запросов CORS требуется просмотр заголовков, указанных в других ответах.