在Angular(v1.2.19)中,我能够在工厂中做到这样的事情:
myApp.factory('GetNumber', ['$resource',
function($resource) {
var get_headers = $resource('some/url', null, {
get_number: {
method: 'HEAD',
transformResponse: function(data, headers) {
var count = headers()['x-number'];
return count;
}
}
});
return get_headers;
}
]);
从我的控制器中调用它:
$q.all({
'item1': GetNumber.get_number().$promise,
'item2': SomeOtherService.get().$promise
})
.then(function(results) {
$scope.newNumber = results.item1.value;
});
我可以在不必检索整个标题的情况下获取自定义标题。
现在在v1.3.15中,它不起作用。我可以在Chrome中看到带有' x-number'在标题中,但是如果我在Chrome中设置一个断点,那么' var count'我从来没有打过它(我确实用v1.2.19命中了它。)
我已经确认使用$ http.head有效,所以如果我在我的控制器中有这个:
$http.head('some/url')
.success(function(data, status, headers, config) {
var count = headers()['x-number'];
$scope.newNumber = count ? count : 0;
});
我得到了我的范围值。
我注意到没有很多人使用http' HEAD'方法,我想知道是否有一个原因,我还没有通过搜索找到?
我确实发现这个StackOverflow问题并回答HTTP Get: Only download the header? (HEAD is not supported),虽然我同意该声明,但我并不想要请求标题和正文的开销。
有什么建议吗? 朱莉
答案 0 :(得分:1)
感谢Kevin建议我使用错误处理程序。我应该考虑自己尝试一下,但我没有。
无论如何,这引导我解决我的问题。为了尝试捕获$ resource中的错误,它建议您使用拦截器。我之前从未使用过它们,并且我使用了AngularJS文档(https://docs.angularjs.org/api/ng/service/ $ http#interceptors)并将我工厂中的代码更改为:
myApp.factory('GetNumber', ['$resource',
function($resource) {
var get_headers = $resource('some/url', null, {
get_number: {
method: 'HEAD',
interceptor: { response: function(response) {
var count = response.headers()['x-number']:
return count ? count : 0;
}, responseError: function(rejection) {
console.log('rejection: ', rejection);
}}
}
});
return get_headers;
}
]);
我还不确定为什么transformResponse停止工作,我现在需要使用拦截器,但我很高兴我现在不必请求整个身体!
朱莉