LeanCloud 的 PHP SDK 中关于异常的处理是否不太合理?以及用户退出却不生效?

2020-02-25 16:08:19 +08:00
 GDC

这两天准备接入 LeanCloud,使用官方的 PHP SDK 时发现了一个不太合理的地方。

比如注册用户的时候,随便产生一个错误,假设用户名重复了,$user->signUp() 会抛出异常, 但 $th->getMessage() 得到的错误信息却不是纯粹的文字提示, 而是包含了 Request 的信息,例如这样:

218 Invalid password, it must be a non-blank string.:{\"body\":{\"username\":\"spark\",\"password\":\"\"},\"method\":\"POST\",\"path\":\"\\/1.1\\/classes\\/_User\"}","code":218}

这样带来一个困扰就是,无法直接把错误信息反馈给前端、给用户看,只能通过 $th->getCode() 得到错误码之后自己去官方文档找对应的文字说明,再对应起来反馈回去。

翻了 SDK 的代码后,最终在 BatchRequestError.php 文件中找到了原因:

public function add($request, $response) {
    $error["code"] = isset($response["code"]) ? $response["code"] : 1;
    $error["error"] = "{$error['code']} {$response['error']}:"
                    . json_encode($request);
    $this->errors[] = $error;
    return $this;
}

可以看到在这里 $error["error"] 就已经被“合体”了。

不知道有没有使用 LeanCloud 的同学,或者 LeanCloud 的人来说说,这个是 feature 还是 bug,目前已知错误码有 160 多个,难道要开发人员自己一个个做对应?


另外还发现一个疑似 bug 的,User::logOut() 之后,下次请求使用相同的凭据 User::getCurrentUser() 还是能获取到当前用户,蛋疼。

1709 次点击
所在节点    全球工单系统
2 条回复
FaceBug
2020-02-25 16:33:05 +08:00
不能算 bug 吧,抛出错误的时候,把原始的请求也抛出是很常见的,不过一般我都是分两个字段的,msg 是 msg,request 是 request。

就这个问题,你其实可以用那个冒号作为分隔符,前面的是你要展示给用户的信息。

另外,就算单独给你 msg ( error )信息,我们通常也不会直接把这种英文的错误展示给终端用户吧(除非是内部用的系统,给程序员、运维看的),通常还是会通过 code 映射一个“人性化”的错误提示
GDC
2020-02-25 16:43:59 +08:00
@cepczkd 我认为分两个字段是比较合理的,另外在开发的网站本身就是英文的…

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/647428

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX