Vue项目处理错误上报原来如此简单

本文探讨了在Vue项目中处理错误上报的重要性,通过利用Vue的errorHandler全局配置捕获应用内的错误,并结合JavaScript的window.onerror处理额外的JS错误,以及针对Promise异常的处理方法。通过示例代码,展示了如何实现Vue应用的全局错误捕获,以提升代码健壮性和用户体验。
摘要由CSDN通过智能技术生成

处理异常的意义

随着网页项目越来越复杂,许多异常报错很难在开发和测试阶段被发现,尽管你可能避开了语法等常规错误,但不可避免的是代码在运行时的错误你仍旧无法准确预料,假设现在有如下一段 Vue 代码,它在生命周期的 created 阶段异步请求并接收了错误的数据,可能就会导致页面渲染出现错误:

<template>{
  { test.obj.xxx }}
</template>
......
created() {this.getSomeData()
},
methods: {getSomeData() {this.fetch().then((res) => {this.test = res // 假设这是请求的错误数据})},
} 

而如果测试人员及时发现了这一错误的话,当他打开控制台时往往就会立即下结论了:噢,是前端的锅🙂

事实上真正的项目中可能会遇到更多"奇妙"的问题,而且如果错误仅发生在某些用户端,那将无从察觉,于是我们会想到应该在程序中处理捕获运行时错误,将错误上报至服务器,然后分析和改进代码来修复已经发生的错误。

所以该如何应对并处理可能发生的某些错误,成为了前端开发的一门必修课,你当然可以在每个代码片段中重复编写 try...catch...、为每个 Promise 都处理 catch,但这不免显得有些狼狈,于是我思考能不能用更优雅的方式,统一处理所有异常,将错误在全局进行捕获然后上报分析。其实在 Vue 中实现这样全局的异常处理并不难,下面看看我是如何做的吧。

如何全局捕获错误异常

查询 Vue 文档我们可以发现全局配置中就有这么一个捕获错误的处理钩子 errorHandler,用法很简单:

Vue.config.errorHandler = function (err, vm, info) {// `info` 是 Vue 特定的错误信息,比如错误所在的生命周期钩子 // 只在 2.2.0+ 可用 
} 

只需要用这个钩子就可以处理大部分 Vue 应用中的错误(如组件生命周期中的错误、自定义事件处理函数内部错误、v-on DOM 监听器内部抛出的错误),并且回调中自带的 info 参数也标记了这个错误大概是属于哪类,同时它还能处理返回 Promise 链的错误,可以说是非常强大了,但是它也并非能处理所有的异常,否则文章写到这就该结束了 ~ 接下来我们测试一下。

首先在全局错误捕获中输出一下 log,先运行一下开头的请求数据错误例子:

Vue.config.errorHandler = function (err, vm, info) {console.log('vue异常错误捕获: ', '错误发生在 ' + info)
} 

可以看到异常成功被捕获了,因为我们模拟了一个数据错误导致渲染出错,所以错误发生在

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值