一种Vue应用程序错误/异常处理机制
现在构建前端应用程序不像以前那么简单,现在,应用程序更加复杂和多样。这就需要在构建前端应用程序的时候考虑很多,错误/异常处理是最重要的方面之一。在应用程序中拥有良好的错误处理机制可以带来很多的好处,如下:
- 良好的错误处理机制可以避免应用程序在出现未处理的异常时崩溃
- 在生产环境下,可以轻松地存储或者跟踪错误记录日志,以便异常的处理
- 可以统一处理错误信息,例如在不破坏应用程序交互的情况下,更改错误信息展示UI
- 有助于改善用户体验
在前端应用程序中,最常见的错误/异常类型可能包括以下几种:
- 语法错误:使用了一些错误的语法
- 运行时错误:由于执行期间的非法操作导致的
- 逻辑错误:由于程序逻辑错误
- Http 错误:API 返回的错误
有很多方法可以解决上面的问题,例如使用 eslint
来检查语法错误,使用适当的 try-catch
语句处理运行时错误,通过适当的单页或者集成测试减少逻辑错误,http
错误可以通过使用 Promise
来处理。
之前在文章《浅谈前端异常监控平台实现方案》中简单介绍前端异常监控的实现方案,在本文中,将推荐一种在 Vue 应用程序中实现错误/异常处理机制。
全局配置
Vue 应用程序有一个全局配置 Vue.config
,可以配置禁止日志和告警、devtools、错误处理程序等等。
可以用自己的配置覆盖这些配置,对于错误处理,可以为其分配一个处理函数 Vue.config.errorHandler
。在整个应用程序中,任何 Vue实例(Vue组件)中的任何未捕获异常都会调用该处理程序。以下代码片段为Vue 应用程序注册一个错误处理方法(一般在项目的 main.js
文件中):
/** * * @param {*} error 错误跟踪 * @param {*} vm 组件错误 * @param {*} info 特定的错误信息,如生命周期钩子、事件等。 */ Vue.config.errorHandler = (error, vm, info) => { console.info(error); console.info(vm); console.info(info); };
处理程序包含 3 个参数:
error
:完整的错误跟踪,包含message
和error stack
vm
:发生错误的Vue组件/实例info
: 特定的错误信息,例如生命周期钩子、事件等。
Vue.config.errorHandler
捕获特定于Vue实例的错误,但无法捕获 Vue 实例之外的错误,如服务。
要捕获 Vue 实例之外的错误,可以使用 window.onerror
事件,可以注册一个错误处理函数,该函数将捕获所有非特定于 Vue 实例的未处理异常。下面的代码片段为其应用注册window.onerror
异常处理函数:
window.onerror = function(message, source, lineno, colno, error) { // TODO: 定义跟踪逻辑 };
自定义异常组件
通常项目中有一些可预知的异常需要自定义 UI ,可以自定义异常组件来统一接管异常的处理。实现的逻辑是如果有异常显示异常信息,否则就显示组件信息,代码如下:
<template> <div> <slot v-if="errors" name="errors"> <a-alert :message="errors.title" :description="errors.description" show-icon type="warning" class="mb-2" > </a-alert> </slot> <slot v-else></slot> </div> </template> <script> export default { name: "QtErrorContainer", props: { errors: Object, // {title:"500错误",description:"数据库连接超时"} }, }; </script>
以上面的组件作为容器来加载其他组件,如通过后台接口拉取列表数据,调用如下:
<QtErrorContainer :errors="errors"> <a-table ></a-table> </QtErrorContainer>
上面的代码在 errors
为 null
或者 false
的时候,显示表格组件 <a-table></a-table>
,否则不显示而显示异常信息。这样实现好处就是所有可预知的异常都由统一的组件来处理,提高复用和灵活性。
日志处理
对于日志处理,可以封装为一个独立的类,如 logger
,负责收集Vue中所有的异常日志,输出到控制台或者通过接口发送到服务器存储或借助第三方日志跟踪平台,只需要修改 logger
的处理方式即可,如下:
import { environment } from "@/environment/"; /** * Logger 日志类 */ class Logger { /** * @constructor AppLogger */ constructor() { this.init(); } init() { if (environment !== "production") { this.log = console.log.bind(console); this.debug = console.debug.bind(console); this.info = console.info.bind(console); this.warn = console.warn.bind(console); this.error = console.error.bind(console); this.toServer = this.error; } else { /** 在生产的情况下,替换函数定义 */ this.log = this.debug = this.info = this.warn = this.error = () => {}; /** TODO: 方法中可以增加接口或者第三方平台跟踪的逻辑 */ this.toServer = (err) => { console.error(err); }; } } } const logger = new Logger(); export { logger };
可以将 logger
类引用到上面的全局配置的处理方法中,如下:
import Vue from "vue"; import { logger } from "@/logger"; /** * * @param {*} error 错误跟踪 * @param {*} vm 组件错误 * @param {*} info 特定的错误信息,如生命周期钩子、事件等。 */ Vue.config.errorHandler = (error, vm, info) => { logger.toServer({ error, vm, info }); }; window.onerror = function (message, source, lineno, colno, error) { logger.toServer({ message, source, lineno, colno, error }); };
总结
错误处理对于应用程序非常重要,在本文中,讨论了Vue.config.errorHandler
使用生命周期钩子的全局错误处理程序和自定义组件来处理可预知的异常。本文提供了基本细节,借助这些细节,可以轻松实现应用程序的错误处理并记录它们,这将有助于创建更好的用户体验。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
openGauss数据库源码解析系列文章——存储引擎源码解析(三)
上一篇我们将详细介绍“4.2.3 astore”相关内容,本篇我们将讲述“3. astore元组多版本机制”、“4.astore访存管理”及“5.astore空间管理和回收”。 4.2.3 astore 3. astore元组多版本机制 openGauss行存储表支持多版本元组机制,即为同一条记录保留多个历史版本的物理元组以解决对同一条记录的读、写并发冲突(读事务和写事务工作在不同版本的物理元组上)。 astore存储格式为追加写优化设计,其多版本元组产生和存储方式如图4-5所示。当一个更新操作将v0版本元组更新为v1版本元组之后,如果v0版本元组所在页面仍然有空闲空间,则直接在该页面内插入更新后的v1版本元组,并将v0版本的元组指针指向v1版本的元组指针。在这个过程中,新版本元组以追加写的方式和被更新的老版本元组混合存放,这样可以减少更新操作的I/O开销。然而,需要指出的是,由于新、老版本元组是混合存放的,因此在清理老版本元组时需要的清理开销会比较大。因此,astore存储格式比较适合频繁插入、少量更新的业务场景。 图4-5 astore多版本元组产生和存储方式示意图 下面结合图4-...
- 下一篇
如何清晰地掌握 Android 应用中后台任务的执行情况?
Android Studio 包含了许多像 布局检查器 和 数据库检查器 这样的检查器,来帮助您调查并了解应用在运行时的内部状态。在 Android Studio Arctic Fox 中,我们发布了一个新的检查器 (Background Task Inspector),用于帮助您监控和调试在应用中使用 WorkManager 2.5.0 或更高版本所调度的 Worker。 对于运行后台的异步任务,甚至是在应用被关闭之后的情况下,都推荐使用 WorkManager。虽然可以很方便的将任务配置成 WorkManager 的 Worker,但将 Worker 加入到队列中后就很难监控它的执行情况,遇到问题也不方便调试。 您可以通过后台任务检查器轻松地监控一个 Worker 的工作状态,查看它和与其链接的其他 Worker 的关系,或者检查 Worker 的输出、频率及其他与时间相关的信息。让我们通过一个示例项目来看看后台任务检查器能做些什么。 我将使用 architectural-components 仓库 中的 WorkManager 示例应用来演示后台任务检查器 (需要将工程中 ver...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- MySQL8.0.19开启GTID主从同步CentOS8
- Hadoop3单机部署,实现最简伪集群
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题