2015-09-24 3 views
3

У меня есть сервер REST, который возвращает заголовок HTTP Link с ответом на PUT, чтобы указать URL в недавно созданной организации:Restangular: Как получить заголовок ответа HTTP?

Link:<entities/6>; rel="created" 

Есть ли возможность прочитать эту ссылку заголовок с Restangular?

Единственное средство для перехвата HTTP-запросов с Restangular я встретил до сих пор зарегистрировать перехватчик ответа в приложение конфигурации:

restangular.addResponseInterceptor(function (data, operation, what, url, response, deferred) { 
    console.log(response.headers()) 
    return response.data; 
}); 

Однако, выше демонстрационной реализации на месте, только заголовок HTTP который регистрируется: content-type. Тем не менее, я вижу в панели разработки браузера, что ответ действительно приходит со многими дополнительными заголовками HTTP-ответа, такими как Server, Date и вышеупомянутым Link.

Почему у меня нет доступа к полному массиву заголовков HTTP-ответа через addResponseInterceptor()? Есть ли способ захватить заголовок ответа HTTP с помощью Restangular?

Примечание: я не ищу ответа с использованием HAL или любого другого специального формата тела ответа. Я хотел бы узнать, могу ли я использовать простые HTTP-заголовки с Restangular или нет (если нет, я, вероятно, прибегу к HAL или чему-то).

+0

Привет! Помогает ли андер вам решить проблему? помните, что редактирование, предлагаемое STEVER, важно. – troig

ответ

9

Для этого не требуется ResponseInterceptor. Вам просто нужно установить fullResponse на номер true, чтобы получить весь ответ (включая заголовки http) каждый раз, когда вы делаете какой-либо запрос.

Restangular.setFullResponse(true); 

Вы можете установить его глобально в своей конфигурации приложения. Что-то вроде этого:

angular.module('YourApp') 
    .config(['RestangularProvider', 
     function (RestangularProvider) { 
     RestangularProvider.setFullResponse(true); 
... 

Затем каждый раз, когда вы получаете ответ, вы можете получить доступ ко всем заголовкам ответа.

Restangular.all('users').getList().then(function(response) { 
    $scope.users = response.data; 
    console.log(response.headers); 
} 

Пример:

response.headers('Link') 

Примечание: быть осторожным, потому что с помощью fullResponse, данные ответа расположен в response.data, а не непосредственно в ответ.

EDIT: В качестве пунктов @STEVER вам также необходимо указать expose the headers в вашем API-интерфейсе сервера. Пример:

Access-Control-Expose-Headers: Link 

Вы можете получить более подробную информацию в Restangular documentation

Надеется, что это помогает.

+2

также не забудьте установить правильный https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Expose-Headers –

+0

Благодаря @STEVER! Вы правы, я забыл упомянуть об этом. Я отредактировал ответ – troig

+1

Спасибо, тройка и STEVER, это работает!Однако мне также необходимо было установить «Access-Control-Allow-Headers: Content-Type». Не знаю, как это связано. Кроме того, мне удается реализовать это как локально «производную» ретрансляционную службу, как в https://github.com/mgonto/restangular#how-to-create-a-restangular-service-with-a-different-configuration- from-the-global-one, позволяя мне использовать это поведение специально для определенных страниц. – SputNick

Смежные вопросы