openGauss Datakit导入安装时的异常处理

2024年 4月 18日 26.8k 0

摘要:全局异常处理器处理异常时,会给前端返回错误信息,此时前端应该捕获并处理错误信息。

异常关系图

问题:

集群安装选择企业版导入,环境分离文件等信息填写错误,点击下一步,按钮一直处在加载中的状态。

此时根据控制台信息进行抓包,查看标头中接口的信息,发现是一个叫/host/fileExist/的接口有异常。

进入接口相关的代码中,查看是什么导致异常的出现。

发现其中一个叫fileExist()的函数在接口处抛出了异常,并未处理,猜想是异常未处理的原因,于是进行验证。

处理后:

状态码由500变成200,msg是"susses",data为false。

加载按钮也不是加载中了,报了文件找不到的错误。

就在以为问题解决了的时候,发现了后端有一个全局异常处理器。

所以,抛出的异常会被其捕获并处理掉,因此并非是后端的问题,应该是前端的错误信息没处理,导致一直在等待......

于是开始验证我的猜想:

第一步,先将异常还原,但将状态码修改为200。

状态码:

  • 修改前

  • 修改后

第二步,打包,运行datakit--导入安装---输入错误的环境分离变量,发现按钮并未在加载中,而是报出了文件找不到的错误。

于是,这说明200的状态码在前端可以被处理,但不是200的状态码产生的异常,并未被捕获并处理掉。

解决方法:

定位前端代码中,fileExist()函数传递的接口所在位置。

在调用fileExist()函数的类中,使得loading.value = false即可。

究其原因,是以上的操作改变了按钮的属性值,加载中的状态就会改变。

其他:

验证过程中,对于控制台中打印的响应为什么是msg和code,并且msg打印的是抛出异常的相关信息,也进行了定位。

总的来说,是全局异常处理器打印的。

如上代码,OpsException是一个自定义异常,它所携带的信息被全局异常处理器调用getMessage()方法调取了,并赋值给msg。

并且,因为data = null条件语句不满足,所以最后并未在控制台输出data,只输出了code和msg。

总结:

全局异常处理器处理异常时,会给前端返回错误信息,此时前端应该捕获并处理错误信息。

如果没有全局异常处理器,那么此时异常只能由JVM的默认异常处理器Thread.uncaughtExceptionHandler中的uncaughtException方法进行处理,处理之后程序会终止。

在前端处理错误信息时,将loading属性在接收处赋值为false,不然会一直等待异步处理,直到浏览器页面超时。

处理前:

处理后:

问号被称为可选链操作符,如果对象为null或者undefined,则返回undefined,不会抛出运行时错误。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论