axios拦截

363 阅读1分钟

可以分为4个部分。

1-A http拦截。 前置双Token方案。

  1. token刷新白名单接口: 登录接口和刷新token接口绕过
  2. 当前时间大于过期时间的前三分钟的时候,前端主动替换。调用刷新token接口。置换失败跳入登录页。
  3. 遇到多次请求,加到promise队列里面,只要超时全部进队列。

promise队列,http config header的Authorization的值为token.

1-B 修改content-type类型

  1. 判断是否请求方法为get,post,patch,delete这四种之一,如果不是,判断是否是FormData. 是form-dat的话,content-type设置为multipart/form-data
  2. 响应200,外部200,内部0,结束promise.resolve() 外部200,内部非0的情况下错误处理下一个处理器

1-C 公共错误处理

根据不同的httpcode跳转不同的路由。 401 无权限 403 没有权限,token过期,进行Logout,然后重定向到login页面。 404请求不存在 503请求异常

function resHandleError({ code, message }: IResultType) {
  const fullPath = router.currentRoute.value.fullPath
  switch (code) {
    case 401: // 无权限
      antMessage.error(`${message}`)
      router.replace({
        path: '/notAuth',
      })
      break
    case 403: //token过期
      antMessage.error('登录过期,请重新登录')
      store
        .dispatch('Logout')
        .then(() => {
          router.replace({ path: '/login', query: { redirect: fullPath } })
        })
        .catch(error => error)
      break
    case 404:
      antMessage.error('网络请求不存在')
      break
    case 500:
    case 501:
    case 503:
      antMessage.error('请求异常,请您稍后重试!')
      break
    default:
      antMessage.error(`${message || '请求异常,请您稍后重试!'}`)
      break
  }
**}**