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 函数在 JavaScript SDK 1.6.x 上不起作用