异常捕获介绍
1.在日常前端开发中对于异常监控的方式可以采用 window.onerror 方式进行监听
window.onerror = function(message, source, lineno, colno, 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) {
}
errorHandler实际应用
针对项目中错误的js语法和接口请求报错进行捕获,需要注意的是接口捕获需要手动捕获
1.在main.js中注册
const errorHandler = (err, vm, info) => {
if(err.isAxiosError){
}else{
console.log('err:'err.toString())
}
}
Vue.config.errorHandler = errorHandler
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){
}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
import ErrorStackParser from 'error-stack-parser'
const errorHandler = (err, vm, info) => {
if(err.isAxiosError){
}else{
const errJson = ErrorStackParser.parse(err)[0]
console.log(errJson)
const fileName = stackInfo.fileName.match(/src.*?.vue/g)[0]
console.log(fileName)
}
}