Restangular为以“$”开头的密钥发送空的有效负载

时间:2014-01-16 17:38:43

标签: mongodb angularjs mlab restangular

我正在使用Restangular连接Mongolab。我想使用以下代码推送更新:

var theData = {"$push":{exercises :{type: "running"}}};
Restangular.all('employees').one(user._id.$oid).customPUT(theData ,null, {apiKey: apiKey});

当我运行它并查看XHR请求时,有效负载始终设置为{}。

但是,如果我拿出$,我的有效载荷如下所示:

{"push":{exercises :{type: "running"}}}

在那个例子中,有效载荷看起来很好,但是mongolab认为我想要添加一个名为“push”的字段而不是推送到excercises数组,因为我没有使用“$ push”关键字。

我可以在字符串中的任何位置加上“$”,除了在前面(例如“$ push”和“push $”工作)但不幸的是,这是mongo推送更新所需要的。是否有一些我缺少的设置,或者这是一个在restangular中的错误?

1 个答案:

答案 0 :(得分:3)

是的,$将被条带化:在发送数据之前,数据将使用angular.toJson函数进行转换:

  

@name angular.toJson

     

@function

     

@description

     

将输入序列化为JSON格式的字符串。具有前导$字符的属性将是   剥离因为角度在内部使用这种表示法。

如果您不想要此行为,则必须提供transformRequest函数(http://docs.angularjs.org/api/ng.$http)。如果您的数据已经是json,您可以写下:

transformRequest: function(data){
   return data;
}

必须在资源配置期间提供transformRequest作为选项。看到
http://docs.angularjs.org/api/ngResource.$resource