我需要在每次获取,保存,更新时转换服务响应。我已经创建了一个资源并添加了一个执行的变换器,但是返回的对象的结构与我不使用变换器时的结构不同。在这里,我谈论的是响应的结构,而不是我正在转变的对象。 这是我的资源:
angular.module('app')
.factory('Insureds', ['$resource', 'config', function ($resource, config) {
function transform(response) {
var insured = response.data.insured;
return response;
}
var memberServicesHostName = config.memberServicesHostName;
return $resource(memberServicesHostName + '/insureds/:insuredId', null,
{
'get': {
method: 'GET', 'withCredentials': true, interceptor:
{
response: function (response) { return transform(response).data; }
}
},
'update': { method: 'PUT', 'withCredentials': true },
'save': { method: 'POST', 'withCredentials': true }
});
}]);
当我不使用变压器时,“保险”在承诺得到解决后处于第一级,它将作为保险对象的实例解析。但是对于变换器,有一个包装器对象,它包含insured和responseStatus属性。它可能与我从拦截器中的“响应”返回的内容有关。应该返回什么,原始响应,就像我在做什么,或者响应.data,还是response.resource.insured?我很困惑......
答案 0 :(得分:0)
默认的响应拦截器是这样的:
function defaultResponseInterceptor(response) {
return response.resource;
}
因此,如果您想保留默认行为,则必须返回response.resource
而不是response.data
:
return $resource(memberServicesHostName + '/insureds/:insuredId', null, {
get: {
method: 'GET',
withCredentials: true,
interceptor: {
response: function (response) {
return transform(response).resource;
}
}
},
...
希望这有帮助。