vue.js全局错误处理函数errorhandler
在 vue.js 中,errorhandler 函数是全局错误处理函数,用于捕获应用程序中未被捕获的错误。
你可以通过定义 errorhandler 函数来自定义全局错误处理逻辑。
语法
vue.config.errorhandler = function (err, vm, info) { // 错误处理逻辑 };
errorhandler 函数接收三个参数:
- err:表示错误对象,包含有关错误的详细信息,如错误消息、堆栈跟踪等。
- vm:表示引发错误的 vue 组件实例。通过访问该实例,你可以获取组件的状态、数据和方法。
- info:提供有关错误的额外信息,通常是一个字符串,描述了错误发生的位置或上下文。
示例:
vue.config.errorhandler = function (err, vm, info) { // 错误处理逻辑 console.error('全局错误处理:', err, vm, info); };
在上述示例中,errorhandler 函数被定义为一个全局错误处理函数。当应用程序中的任何组件抛出未被捕获的错误时,该函数将被调用。你可以在该函数中编写逻辑来处理错误,如记录错误、显示错误提示、进行错误恢复等。
需要注意的是,如果你在组件中定义了 errorcaptured 钩子函数来捕获错误,那么该组件的 errorcaptured 钩子函数将优先于全局的 errorhandler 函数被调用。
局错误处理函数errorhandler常见的使用场景
- 捕获和记录错误:你可以使用 errorhandler 来捕获应用程序中未被捕获的错误,并将其记录到日志中或发送给远程错误跟踪服务。这样可以帮助你及时发现和解决潜在的问题。
- 显示错误提示:当应用程序中出现错误时,你可以使用 errorhandler 来显示用户友好的错误提示。例如,你可以通过通知、弹窗或类似的方式向用户展示错误信息,以提供更好的用户体验。
- 错误恢复和回退:在某些情况下,当应用程序遇到错误时,你可能希望进行错误恢复或回退操作。通过在 errorhandler 中执行相应的逻辑,你可以尝试修复错误或回到应用程序的先前状态。
- 上报错误统计:除了记录错误,你还可以使用 errorhandler 来进行错误统计和分析。通过收集和汇总应用程序中的错误信息,你可以了解常见错误类型、发生频率等信息,从而进行性能优化和错误预防。
- 处理异步错误:在异步操作中,错误通常需要手动捕获和处理。在 errorhandler 中,你可以统一处理异步操作中出现的错误,避免它们被静默丢失。
vue errorhandler异常捕获
异常捕获介绍
1.在日常前端开发中对于异常监控的方式可以采用 window.onerror 方式进行监听
window.onerror = function(message, source, lineno, colno, error) { // message:错误信息(字符串) // source:发生错误的脚本url // lineno:发生错误的行号 // colno:发生错误的列号 // error:error对象 } //或者 window.addeventlistener('error', function(e) { console.log(e) console.log(e.target) })
2.在vue中需要使用errorhandler方法
onerror方法无法捕获vue组件信息
vue.config.errorhandler = function (err, vm, info) { // err: 具体错误信息 // vm: 当前错误所在的vue实例 // info: 错误所在的生命周期钩子 }
errorhandler实际应用
针对项目中错误的js语法和接口请求报错进行捕获,需要注意的是接口捕获需要手动捕获
1.在main.js中注册
//因为接口报错需要手动捕获 创建公用方法 const errorhandler = (err, vm, info) => { if(err.isaxioserror){ //axios请求错误 }else{ //js语法错误 console.log('err:'err.tostring()) } } //调用 vue.config.errorhandler = errorhandler //axios手动捕获使用 绑定 prototype vue.prototype.$throw = (error) => errorhandler(error, this)
2.axios错误捕获
在封装好的axios请求中进行错误响应捕获,将错误信息交给 errorhadaler 函数进行处理
vue.$throw(error) //或 vue.prototype.$throw(error)
对于error信息的解析
1.通过json.stringify()对err进行序列化
const errorhandler = (err, vm, info) => { if(err.isaxioserror){ //axios请求错误为手动捕获 不需要进行解析处理 }else{ const errjson = json.stringify(err, object.getownpropertynames(err), 2) console.log(json.parse(errjson )) } }
2.通过error-stack-parser解析error堆栈
安装方式:
npm install error-stack-parser
yarn add error-stack-parser
//引入error-stack-parser import errorstackparser from 'error-stack-parser' const errorhandler = (err, vm, info) => { if(err.isaxioserror){ //axios请求错误为手动捕获 不需要进行解析处理 }else{ const errjson = errorstackparser.parse(err)[0] console.log(errjson) //通过filename截取页面名称 const filename = stackinfo.filename.match(/src.*?.vue/g)[0] console.log(filename) } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论