Parse Serve 成功 beforeSave 为某些用户返回“找不到对象”错误

Posted

技术标签:

【中文标题】Parse Serve 成功 beforeSave 为某些用户返回“找不到对象”错误【英文标题】:Parse Serve successful beforeSave returns "Object Not Found" error for some users 【发布时间】:2018-03-14 22:24:05 【问题描述】:

我有一个移动应用程序,它通过递增数字字段来更新 Parse 对象。对于几个用户,更新返回“找不到对象”错误结果。

查看服务器日志时,我看到对象的 beforeSave 成功,然后立即显示“未找到对象”错误。

[32minfo[39m: beforeSave 为用户 Kd06Glks3q 触发了时隙: 输入:...(截断) 结果:"object":"current":"__op":"Increment","amount":1,"organizationId":"5KK3RckkmD","available":true className=Timeslot, triggerType=beforeSave , 用户=Kd06Glks3q [31merror[39m:错误生成响应。 ParseError 代码:101,消息:'找不到对象。' 代码=101,消息=找不到对象。 [31merror[39m:找不到对象。代码=101,消息=找不到对象。

这似乎只发生在某些 Parse 用户中(目前为 2 个)。执行相同操作的其他用户成功,并且日志显示 afterSave 在 beforeSave 之后立即完成。我已将 VERBOSE 环境变量设置为 1,但没有看到任何其他数据。

我正在运行 Parse Server 2.7.4

有人遇到过此类问题吗?

【问题讨论】:

我唯一一次看到错误 101 是 Parse.Query.get(),这表明具有传入对象 id 的对象不存在,或者至少用户不可获取.他们是否保存了一个以某种方式被删除的对象?或者他们是否保存了他们没有查找/获取权限的对象? Timeslot 对象存在(未删除)并且用户首先获取它,因此似乎具有适当的访问权限。在 beforeSave 本身中有一个相关对象的提取,但是有日志消息让我知道提取成功完成。实际上,日志中一直显示日志消息,直到 beforeSave 中的 response.success() 调用,上面的日志表明 beforeSave 执行成功。 【参考方案1】:

事实证明,有问题的对象有一个 ACL 指向丢失的 Role 对象。我相信这会导致 Parse Server 在实际保存数据之前尝试应用 ACL 时报告“找不到对象”错误。如果返回的 Parse Error 实际上引用了未找到的对象的类和 id,那就太好了...

【讨论】:

以上是关于Parse Serve 成功 beforeSave 为某些用户返回“找不到对象”错误的主要内容,如果未能解决你的问题,请参考以下文章

如果使用 Parse 主密钥,是不是可以检查 beforeSave 方法内部?

parse-server:如何区分用户类 BeforeSave 中的 signUp 和常规 ParseUser.save?

如何取消设置“beforeSave”云函数中的嵌套属性?

beforeSave 函数在 JavaScript SDK 1.6.x 上不起作用

推送通知 - 两个应用程序共享同一个 Parse Serve

解析云代码之前保存未在更新时运行