AI通识课
如何对HonoJS运行期错误进行处理?
可以通过调用Hono的notFound与onError方法注册全局性的错误处理器。
不过,大部分情况下不需要添加,只有自己确实想定制处理的时候才需要。
假如处理不好,返回给客户端的信息可能会有混淆,所以,不建议覆写,尤其是onError(如果非要覆写,需要处理不同error类型的检查和分类)。
比如,今天(2024-01-19)就因为自定义了onError全都返回500, 导致我以为是hono框架的问题,实际上是我没有区分具体的Error类型,全都一股脑儿的返回500,从而形成错觉。 (即使hono原始返回的Error是401的错误,我也是返回了500,从而觉得是hono的问题,其实是我的问题)
另外,在编写handler逻辑的时候,如果中间有状态我们想要交给全局的错误处理器,可以通过抛出HTTPException的方式达成这一目的:
HTTPException的设计初衷更多是面向出现致命 1错误的场景(比如认证失败、没有权限等情况),在Handler较少用到,因为Handler中有更多选择来处理分支逻辑,所以,HTTPException反倒是在Hono的Middleware实现中更能发挥作用,因为Middleware不能返回Response(handler则可以),所以,除了让处理流程顺着Pipeline设计“顺流直下”,唯一可以干预的方式就是通过抛出HTTPException来中断执行流程。
Footnotes
-
其实也没有那么致命,只不过英文原文是Fatal Error。 ↩
「架构师的修炼」大礼包
管理者入门与进阶课程