这两天准备接入 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()
还是能获取到当前用户,蛋疼。
1
FaceBug 2020-02-25 16:33:05 +08:00
不能算 bug 吧,抛出错误的时候,把原始的请求也抛出是很常见的,不过一般我都是分两个字段的,msg 是 msg,request 是 request。
就这个问题,你其实可以用那个冒号作为分隔符,前面的是你要展示给用户的信息。 另外,就算单独给你 msg ( error )信息,我们通常也不会直接把这种英文的错误展示给终端用户吧(除非是内部用的系统,给程序员、运维看的),通常还是会通过 code 映射一个“人性化”的错误提示 |