Parse platform beforeSave中的Parse.com更新会导致忽略所有其他更改

Parse platform beforeSave中的Parse.com更新会导致忽略所有其他更改,parse-platform,parse-cloud-code,Parse Platform,Parse Cloud Code,我试图在Parse.com后端使用beforeSave触发器,但使用该触发器似乎会导致忽略从我的应用程序发送的数据,而不是仅保存我在beforeSave触发器本身中所做的更改 (注意:对于下面的示例,我使用的是一个稍微调整过的示例应用程序版本。) 使用以下代码时: Parse.Cloud.beforeSave("TodoItem", function(request, response) { request.object.set("Description", "Where have al

我试图在Parse.com后端使用beforeSave触发器,但使用该触发器似乎会导致忽略从我的应用程序发送的数据,而不是仅保存我在beforeSave触发器本身中所做的更改

(注意:对于下面的示例,我使用的是一个稍微调整过的示例应用程序版本。)

使用以下代码时:

Parse.Cloud.beforeSave("TodoItem", function(request, response) {
    request.object.set("Description", "Where have all my changes gone?");
    response.success();
});
保存新对象时,只保存“Description”值,忽略从iOS示例应用程序实际发送到解析的值,保存新行,但将空值保存到所有其他字段中

日志文件显示:

I2015-10-05T01:30:12.365Z]v17 before_save triggered for TodoItem for user KiKpmdbErc:
Input: {"original":null,"update":{"ACL":{"KiKpmdbErc":{"read":true,"write":true}},"Description":"fifth notes","IsDone":true,"Title":"Fifth task"}}
Result: Update changed to {"Description":"Where have all my changes gone?"}
尝试更新现有行将忽略其他更新的值,并且仅更新“描述”字段(使用beforeSave触发器中的值)。更新日志显示:

I2015-10-05T01:52:14.267Z]v17 before_save triggered for TodoItem for user KiKpmdbErc:
Input: {"original":{"ACL":{"KiKpmdbErc":{"read":true,"write":true}},"Description":"This is my first task.  Yay.","IsDone":true,"IsNewest":false,"Title":"First Task","createdAt":"2015-09-18T23:08:16.159Z","objectId":"w0MLHAwgij","updatedAt":"2015-10-04T21:46:28.833Z"},"update":{"ACL":{"KiKpmdbErc":{"read":true,"write":true}},"Description":"This is my first task.","IsDone":false,"Title":"Still First Task"}}
Result: Update changed to {"Description":"Where have all my changes gone?"}
两个日志都显示了正确的
原始:
更新:
值(显示我试图对
标题
IsDone
说明
)所做的更改,但实际写入后端的唯一更改是我在beforeSave触发器中设置的更新值。(日志文件似乎通过“结果:更新更改为…”部分告诉我这一点,但为什么?)

所有的例子,其他的Stackoverflow问题,Google群组帖子等等。我可以发现这应该是正确的,那么我是否只是缺少了一些其他的东西,或者在代码或我的解析应用程序的其他地方需要更改一些其他的东西

2015年9月10日更新:

注释掉
request.object.set(“Description”…
行,如下所示)会导致更新看起来被完全忽略,并写入新行,所有“用户”字段都设置为“(未定义)”,日志或错误日志中没有任何内容

触发:

Parse.Cloud.beforeSave("TodoItem", function(request, response) {
    //request.object.set("Description", "Where have all my changes gone?");
    response.success();
});
日志(这是日志中的最后一项;没有保存的迹象):

删除beforeSave触发器将完全恢复“正常”行为:更新和插入将正常进行

移除触发器:

//Parse.Cloud.beforeSave("TodoItem", function(request, response) {
//    request.object.set("Description", "Where have all my changes gone?");
//    response.success();
//});
日志在更新或插入后不显示任何内容(正如预期的那样,因为现在没有触发器);日志中的最后一行是正在更新的云代码:

I2015-10-09T18:00:46.686Z]Deployed v19 with triggers:
返回beforeSave触发器(使用不同的描述)将再次阻止更新:

Parse.Cloud.beforeSave("TodoItem", function(request, response) {
    request.object.set("Description", "Breaking me again are you?");
    response.success();
});
仅更新了描述字段,但下面的日志显示我试图更新描述、标题和IsDone值:

I2015-10-09T18:13:15.559Z]v20 before_save triggered for TodoItem for user KiKpmdbErc:
  Input: {"original":{"ACL":{"KiKpmdbErc":{"read":true,"write":true}},"Description":"Breaking me again are you?","IsDone":false,"Title":"Fifth Task","createdAt":"2015-10-09T18:07:10.012Z","objectId":"yZmkTXZxte","updatedAt":"2015-10-09T18:09:01.602Z"},"update":{"ACL":{"KiKpmdbErc":{"read":true,"write":true}},"Description":"Breaking me again are you?  NOOOO","IsDone":true,"Title":"Fifth Task?"}}
  Result: Update changed to {"Description":"Breaking me again are you?"}

据我所见,beforeSave触发器肯定存在问题:添加一个触发器会破坏正确保存新数据或更改的数据的能力,但删除它会恢复正确的保存。

您使用的是Parse SDK的哪个版本?我遇到了一个类似的问题,我所有的字段都突然消失,并通过重新使用JavaScript解决了这个问题SDK版本1.4.2


是我描述了如何将其更改回1.4.2的答案。

您在这里做了很好的研究,但是当(a)注释掉
集(“description”
行)和/或(b)时,可以使案例变得可靠的是行为描述(以及备份它的日志输出)当整个
beforeSave
被注释掉时。您可能会发现该对象仍在不完整地保存,并且您错误地将责任归咎于beforeSave。上面添加了其他测试和结果;看起来问题显然只是beforeSave。
I2015-10-09T18:13:15.559Z]v20 before_save triggered for TodoItem for user KiKpmdbErc:
  Input: {"original":{"ACL":{"KiKpmdbErc":{"read":true,"write":true}},"Description":"Breaking me again are you?","IsDone":false,"Title":"Fifth Task","createdAt":"2015-10-09T18:07:10.012Z","objectId":"yZmkTXZxte","updatedAt":"2015-10-09T18:09:01.602Z"},"update":{"ACL":{"KiKpmdbErc":{"read":true,"write":true}},"Description":"Breaking me again are you?  NOOOO","IsDone":true,"Title":"Fifth Task?"}}
  Result: Update changed to {"Description":"Breaking me again are you?"}