如何在Angular中使用$ resource访问响应头?

时间:2015-02-09 08:52:45

标签: angularjs http angular-resource

我基本上是这样打get个请求:

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

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

这样可以正常工作..但是如何获得响应头?

3 个答案:

答案 0 :(得分:39)

您可以使用transformResponse操作defined here这可以添加标题

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

请参阅此处的工作示例JSFiddle

答案 1 :(得分:18)

@ Martin的答案适用于相同的域请求。所以我想补充一点,如果您使用跨域请求,则必须添加另一个带有Access-Control-Expose-Headers: X-Blah, X-Bla的标头以及Access-Control-Allow-Origin:*标头。

其中X-BlahX-Bla是自定义标头。

此外,您无需使用转换请求来获取标头。您可以使用以下代码:

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

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

请参阅this小提琴。 希望这会有所帮助!!!

答案 2 :(得分:6)

老问题,但我认为值得一提,以备将来参考。 有官方的'角度文档中的解决方案:

  

值得注意的是get,query等成功回调   方法也在来自服务器的响应中传递   作为$ http header 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请求,需要公开其他答案中提到的标题。