Angularjs 为资源编写拦截器的正确方法是什么?
我需要在每次获取、保存和更新时转换服务的响应。我已经创建了一个资源并添加了一个执行的转换器,但是返回的对象的结构与我不使用transformer时的结构不同。在这里,我谈论的是响应的结构,而不是我正在转换的对象。 这是我的资源:Angularjs 为资源编写拦截器的正确方法是什么?,angularjs,angularjs-resource,Angularjs,Angularjs Resource,我需要在每次获取、保存和更新时转换服务的响应。我已经创建了一个资源并添加了一个执行的转换器,但是返回的对象的结构与我不使用transformer时的结构不同。在这里,我谈论的是响应的结构,而不是我正在转换的对象。 这是我的资源: angular.module('app') .factory('Insureds', ['$resource', 'config', function ($resource, config) { function transform(respon
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 }
});
}]);
当我不使用transformer保险时,当承诺得到解决时,它将作为保险对象的一个实例解决。但对于transformer,有一个包装器对象,它包含保险和responseStatus属性。这可能与我从拦截器中的响应返回的内容有关。像我这样的原始响应,或者response.data,或者response.resource.confered,应该返回什么?我很困惑…默认响应拦截器如下所示:
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;
}
}
},
...