Vue errorHandler异常捕获
Vue errorHandler 异常捕获,error堆栈解析
·
异常捕获介绍
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)
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)