当前位置:首页 > VUE

vue实现过期接口拦截

2026-02-22 15:57:39VUE

Vue 实现过期接口拦截方案

在 Vue 项目中拦截过期接口通常需要结合 Axios 拦截器和后端返回的状态码进行处理。以下是几种常见实现方式:

基于 HTTP 状态码的拦截

后端通常会在接口过期时返回特定状态码(如 401 或 403)。可以在 Axios 响应拦截器中统一处理:

// axios 拦截器配置
axios.interceptors.response.use(
  response => response,
  error => {
    const { status } = error.response
    if (status === 401 || status === 403) {
      // 跳转登录页或刷新 token
      router.push('/login')
    }
    return Promise.reject(error)
  }
)

基于自定义响应字段的拦截

部分 API 设计会在响应体中包含过期标识字段:

axios.interceptors.response.use(response => {
  if (response.data.code === 'TOKEN_EXPIRED') {
    // 执行 token 刷新逻辑
    return refreshToken().then(() => axios(response.config))
  }
  return response
})

Token 自动刷新机制

实现无感知的 token 刷新流程:

let isRefreshing = false
const failedQueue = []

axios.interceptors.response.use(null, error => {
  if (error.response.status === 401 && !isRefreshing) {
    isRefreshing = true
    return refreshToken().then(newToken => {
      // 重试所有失败的请求
      failedQueue.forEach(prom => prom.resolve(axios(prom.config)))
      failedQueue.length = 0
      return axios(error.config)
    }).finally(() => {
      isRefreshing = false
    })
  }

  // 将请求加入队列等待刷新后重试
  if (isRefreshing) {
    return new Promise((resolve) => {
      failedQueue.push({ resolve, config: error.config })
    })
  }

  return Promise.reject(error)
})

结合 Vuex 的状态管理

在大型项目中建议结合状态管理处理过期状态:

// store/modules/auth.js
actions: {
  checkApiExpiry({ commit }, error) {
    if (error.response.data.code === 'API_DEPRECATED') {
      commit('SET_API_EXPIRED', true)
    }
  }
}

// 组件中
this.$store.dispatch('checkApiExpiry', error)

版本控制拦截

对于接口版本过期的场景:

axios.interceptors.response.use(response => {
  if (response.headers['api-version'] !== currentVersion) {
    showVersionWarningModal()
  }
  return response
})

注意事项

  1. 避免循环刷新:需要设置最大刷新次数限制
  2. 并发请求处理:使用队列管理多个并发过期请求
  3. 用户提示:过期时应提供友好提示而非直接跳转
  4. 本地缓存清理:接口过期时需清除相关本地存储数据

以上方案可根据实际项目需求组合使用,建议配合后端定义的明确过期标识规范实现。

vue实现过期接口拦截

标签: 接口vue
分享给朋友:

相关文章

vue表格实现教学

vue表格实现教学

Vue 表格实现方法 使用原生HTML表格 在Vue模板中直接使用HTML的<table>标签,结合v-for动态渲染数据: <template> <table&…

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…

vue实现文章锚点定位

vue实现文章锚点定位

实现文章锚点定位的方法 在Vue中实现文章锚点定位可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML锚点 通过HTML的id属性和<a>标签的href属性实现锚点跳转。在V…

vue实现排序

vue实现排序

Vue 实现排序的方法 在 Vue 中实现排序可以通过多种方式完成,以下是一些常见的方法: 使用计算属性排序数组 计算属性非常适合对数据进行排序,因为它会在依赖的数据变化时自动更新。以下是一个示例:…

分页实现vue

分页实现vue

分页实现(Vue) 在Vue中实现分页功能通常需要结合前端分页逻辑和后端API支持。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在客户端完成分页逻辑。 <templ…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…