Javascript 角资源响应拦截器
我想在资源上创建一个自定义操作,它将处理从服务器收到的结果Javascript 角资源响应拦截器,javascript,angularjs,rest,Javascript,Angularjs,Rest,我想在资源上创建一个自定义操作,它将处理从服务器收到的结果 angular.module('problem', ['ngRoute', 'ngResource']) .factory('Abc', function ($resource) { return $resource('api/abc/:abcId', {abcId: '@id'}, { customQuery: { method: "GET",
angular.module('problem', ['ngRoute', 'ngResource'])
.factory('Abc', function ($resource) {
return $resource('api/abc/:abcId', {abcId: '@id'}, {
customQuery: {
method: "GET",
isArray: true,
interceptor: {
response: function (response) {
// some operations that manipulate data based od response
response.data = [5, 6]; // for simplifity
console.log("manipulation finished"); // log is saved
return response;
}
}
}
}
);
})
;
但是当我使用自定义操作时,我得到的是未修改的结果,而不是已处理的结果。
下面是显示预期行为(以及注释中的相关错误)的代码:
谢谢你的“拦截器”想法
在我看来
response.data = [5, 6]; // for simplifity
return response;
应该返回一个带有属性数组“data”的响应对象,所以
应该失败
为了更好地操作资源响应的结果,请使用response。resource而不是response.data-有真正的REST对象(使用CRUD方法)也许您需要添加一个新的transformResponse转换,您可以很容易地这样做(记住注入
$http
):
不同的是,
result
将被response.resource
替换,而拦截器的返回值是正在解析result的值。$promise
问题当前已过时,但我想我应该返回一个新的响应对象,其中包含新数据,而不是篡改它。很可能响应。数据是不可变的,甚至是冻结的。
response.data = [5, 6]; // for simplifity
return response;
result.length;
transformResponse: $http.defaults.transformResponse.concat([
function (data, headersGetter) {
return data.objects
}