处理 vue 项目中的错误
1. 错误类型
前端错误主要分为两类:
- 后端接口错误:HTTP 状态码非 2xx、后端业务 code 不为 0、网络异常等。
- 代码中本身逻辑错误:运行时异常、组件渲染错误、未捕获的 Promise 拒绝等。
2. 如何处理
后端接口错误
使用响应拦截器 axios.interceptor.response.use 进行拦截:
apiClient.interceptors.response.use(
response => response,
error => {
if (error.response.status === 401) {
router.push({ name: 'Login' })
} else {
message.error('出错了')
return Promise.reject(error)
}
}
)
代码逻辑问题
1) 全局设置错误处理函数
Vue.config.errorHandler = function (err, vm, info) {
// 处理错误
// info 是 Vue 特定的错误信息,比如错误所在的生命周期钩子
}
errorHandler 指定组件的渲染和观察期间未捕获错误的处理函数。这个处理函数被调用时,可获取错误信息和 Vue 实例。
2) 生命周期钩子 errorCaptured
errorCaptured(err: Error, vm: Component, info: string): boolean => {}
此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。
错误传播规则:
- 默认情况下,错误会沿着组件树向上"冒泡",依次触发父级组件的
errorCaptured。 - 如果任何
errorCaptured返回false,会阻止继续向上传播。 - 如果到达应用根级仍未被处理,会触发全局的
errorHandler(如果在 Vue 3 中,还会触发app.config.errorHandler)。 - 如果
errorCaptured自身抛出错误,这个新错误会继续向更上层传播。
来源整理自:vue3js.cn 面试官系列



