【问题标题】:Restangular sends empty payload for keys starting with "$"Restangular 为以“$”开头的键发送空有效负载
【发布时间】:2014-02-05 18:47:07
【问题描述】:

我正在使用 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"}}}

在这种情况下,payload 看起来不错,但 mongolab 认为我想添加一个名为“push”的字段,而不是推送到 excercises 数组,因为我没有使用“$push”关键字。

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

【问题讨论】:

    标签: mongodb angularjs mlab restangular


    【解决方案1】:

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

    @name angular.toJson

    @函数

    @描述

    将输入序列化为 JSON 格式的字符串。带有前导 $ 字符的属性将是 剥离,因为 Angular 在内部使用此表示法。

    如果您不希望这种行为,您必须提供一个 transformRequest 函数 (http://docs.angularjs.org/api/ng.$http)。如果您的数据已经是 json,您可以只写:

    transformRequest: function(data){
       return data;
    }
    

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

    【讨论】:

    • 没错……看起来有问题的代码在angular source 中。因为它只在对象上去掉它,如果我在将它添加到 put 请求之前使用 JSON.stringify() 自己对其进行字符串化,它会毫无问题地通过。感谢您为我指明正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    相关资源
    最近更新 更多