当前位置:首页 > 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)

版本控制拦截

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

vue实现过期接口拦截

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

注意事项

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

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

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

相关文章

vue怎么实现动画

vue怎么实现动画

Vue 动画实现方法 Vue 提供了多种方式实现动画效果,包括内置过渡系统、第三方库集成以及 CSS 动画。以下是常见实现方法: 使用 Vue 过渡系统 通过 <transition>…

vue实现按钮刷新

vue实现按钮刷新

Vue 实现按钮刷新功能 在 Vue 中实现按钮刷新功能可以通过多种方式实现,具体取决于刷新需求是局部刷新还是全局刷新。以下是几种常见的方法: 使用 window.location.reload()…

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

分页实现vue

分页实现vue

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

vue 实现视频

vue 实现视频

Vue 实现视频播放功能 使用 Vue 实现视频播放功能可以通过 HTML5 的 <video> 标签或第三方库(如 video.js)来实现。以下是两种常见的方法: 使用 HTML5…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…