如何配置ngResource来命名它的发布/发布数据?

时间:2015-10-16 18:16:10

标签: javascript angularjs ngresource

我定义了以下服务来处理我的用户资源。服务器返回命名空间的JSON数据,并期望返回命名空间的JSON数据。不幸的是,虽然我已经能够将其配置为读取数据,但它拒绝命名输出数据。我最接近的是writeUserKey功能,这只会导致服务器抱怨。我认为它覆盖了JSON编码,导致angular只发出[object object]而不是JSON字符串。我如何让它工作?

代码:

servicesModule.factory('User', ['$resource', '$q', 'API_BASE',
  function($resource, $q, apiPath){
    var readUsersKey = function(data, headersGetter){
      if(data.users) return data.users;
      return data;
    };
    var writeUserKey = function(data, headersGetter){
      data = { user: data};
      return data;
    };
    var readUserKey = function(data, headersGetter){
      if (data.user) return data.user;
      return data;
    };
    return $resource(apiPath+'users/:id', {id:'@_id'},{
        index:   { method: 'get', isArray:true, responseType: 'json', transformResponse:readUsersKey},
        show:    { method: 'get', responseType: 'json', transformResponse:readUserKey},
        update:  { method: 'put', responseType: 'json', transformResponse:readUserKey, 
          transformRequest:writeUserKey},
        create:  { method: 'post', responseType: 'json', transformResponse:readUserKey, 
          transformRequest:writeUserKey}
      });
  }]);

原始输出:{ "key":"value","key2":"value2","key2":"value2" }

当前输出:[object object]

所需输出:{ "user": { "key":"value","key2":"value2","key2":"value2" } }

1 个答案:

答案 0 :(得分:0)

有时午餐有帮助。抓住一些食物并在其他部分的项目上闲逛之后,我意识到解决方案非常明显。如果我重写了默认的序列化,我只需要重现一个简单的.toJson()调用。

将writeUserKey更改为:

var writeUserKey = function(data, headersGetter){
  return angular.toJson({ user: data});
};

看起来这似乎比开箱即用应该要求的东西更复杂,但它确实有效。如果有更好的处理命名空间数据的方法,请告诉我!