Restangular:如何获取 HTTP 响应 header?

Restangular: How to get HTTP response header?

我有一个 REST 服务器,它 returns 一个 Link HTTP header 响应 PUT 以指示 newly-created 实体的 URL :

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

有没有可能用 Restangular 阅读 link header?

到目前为止,我遇到的使用 Restangular 拦截 HTTP 请求的唯一工具是在应用程序配置中注册一个响应拦截器:

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

但是,有了上面的演示实现,唯一被记录的 HTTP header 是 content-type。不过,我可以在浏览器开发工具栏中看到响应确实带有许多额外的 HTTP 响应 header,例如 ServerDate 和前面提到的 Link

为什么我无法通过 addResponseInterceptor() 访问完整的 HTTP 响应数组 header? 有什么方法可以使用 Restangular 捕获有问题的 HTTP 响应 header?

注意:我不会使用 HAL 或任何其他特殊响应 body 格式搜索答案。我想知道我是否可以将纯 HTTP headers 与 Restangular 一起使用(如果不能,我可能会求助于 HAL 或其他东西)。

您不需要 ResponseInterceptor 来执行此操作。您只需将 fullResponse 设置为 true 即可在每次执行任何请求时获得整个响应(包括 http headers)。

Restangular.setFullResponse(true);

您可以在您的应用配置中进行全局设置。像这样:

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

然后,每次收到回复,您都可以访问所有回复headers。

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

中获得更详细的信息

希望对您有所帮助。