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
    }