前端接口(Vue 项目接口错误太乱?我是这样统一前端异常处理的)

前端接口(Vue 项目接口错误太乱?我是这样统一前端异常处理的)
Vue 项目接口错误太乱?我是这样统一前端异常处理的

接口返回 200,但 code ≠ 0
Token 过期要跳登录
没权限要提示
网络异常还要兜底

如果这些判断写在每个页面里,项目一定会失控。

我一开始也是这样写的:

if (res.code === 401) {  router.push('/login')} else if (res.code !== 0) {  ElMessage.error(res.msg)}

结果是:
每个页面一套判断,维护成本极高。


一、这不是业务问题,是工程问题

后来我意识到一个事实:

接口异常的处理逻辑,不应该属于任何一个页面。

它是:

  • 全局性的
  • 规则统一的
  • 必须可控的

所以最终方案只有一个:
统一在 Axios 层解决


二、我的整体思路(很关键)

我把前端接口异常分成 4 类:

1️⃣ 网络异常(断网 / 超时)
2️⃣ 登录态异常(Token 失效)
3️⃣ 权限异常(无权限)
4️⃣ 业务异常(code ≠ 0)

页面层只关心一件事:数据是否可用。


三、Axios 响应拦截器核心实现

关键代码:

axios.interceptors.response.use(  response => {    const { code, msg } = response.data    if (code === 0) {      return response.data    }    // Token 失效    if (code === 401) {      ElMessage.error('登录已过期,请重新登录')      router.push('/login')      return Promise.reject(msg)    }    // 业务异常    ElMessage.error(msg || '请求失败')    return Promise.reject(msg)  },  error => {    ElMessage.error('网络异常,请稍后再试')    return Promise.reject(error)  })

四、封装后的效果是什么?

页面里只剩一句:

const list = await getList()

没有:

前端接口(Vue 项目接口错误太乱?我是这样统一前端异常处理的)

  • Token 判断
  • code 判断
  • 错误提示

页面只负责“展示数据”,不再关心“异常逻辑”。


五、这个改动带来的真实收益

✔ 页面代码明显变干净
✔ 接口规则变更,只改一处
✔ 新人接手项目成本降低
✔ 工程可维护性明显提升

文章版权声明:除非注明,否则均为边学边练网络文章,版权归原作者所有

相关阅读

最新文章

热门文章

本栏目文章