2015-09-24 183 views
3

我有它返回一個Link HTTP標頭的PUT的響應,指示新創建實體的URL一個REST服務器: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

爲什麼我無法通過addResponseInterceptor()訪問完整的HTTP響應頭數組? 有沒有什麼辦法可以使用Restangular捕獲有問題的HTTP響應頭?

注意:我不搜索使用HAL或任何其他特殊響應主體格式的答案。我想知道我是否可以使用帶有Restangular的純HTTP頭(如果沒有,我可能會訴諸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,不直接響應。

編輯:正如@STEVER指出,您還需要在您的服務器API中使用expose the headers。 例子:

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

謝謝troig和STEVER,它確實有用!不過,我還需要設置「Access-Control-Allow-Headers:Content-Type」。不知道這是如何相關的。另外,我設法將其作爲本地「衍生」Restangular服務實現,如https://github.com/mgonto/restangular#how-to-create-a-restangular-service-with-a-different-configuration-從全球範圍內,允許我在特定頁面上使用此行爲。 – SputNick