当前位置: 代码网 > it编程>前端脚本>Vue.js > Vue.js中的全局错误处理函数errorHandler用法

Vue.js中的全局错误处理函数errorHandler用法

2024年06月10日 Vue.js 我要评论
vue.js全局错误处理函数errorhandler在 vue.js 中,errorhandler 函数是全局错误处理函数,用于捕获应用程序中未被捕获的错误。你可以通过定义 errorhandler

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)
	}
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com