无法使用 $resource 和方法 'HEAD' 仅获取 AngularJS (v1.3.15) 中的 header
Can't get only the header in AngularJS (v1.3.15) using $resource and method 'HEAD'
在 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;
});
而且我可以取回自定义 header 而无需检索整个 header。
现在v1.3.15,不支持了。我可以在 Chrome 中看到 header,在 header 中看到 'x-number',但是如果我在 'var count' 行的 Chrome 中放置一个断点,我从来没有打过它(我确实用 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' 方法的例子,我想知道是否有我还没有通过搜索找到的原因?
我确实找到了这个 Whosebug 问题和答案 ,虽然我同意该声明,但我不希望请求 header 和 body 的开销。
有什么建议吗?
朱莉
感谢 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 停止工作,我现在需要使用拦截器,但很高兴我现在不必请求整个 body!
朱莉
在 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;
});
而且我可以取回自定义 header 而无需检索整个 header。
现在v1.3.15,不支持了。我可以在 Chrome 中看到 header,在 header 中看到 'x-number',但是如果我在 'var count' 行的 Chrome 中放置一个断点,我从来没有打过它(我确实用 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' 方法的例子,我想知道是否有我还没有通过搜索找到的原因?
我确实找到了这个 Whosebug 问题和答案 ,虽然我同意该声明,但我不希望请求 header 和 body 的开销。
有什么建议吗? 朱莉
感谢 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 停止工作,我现在需要使用拦截器,但很高兴我现在不必请求整个 body!
朱莉