vue3axios封装案例

import axios from 'axios'
import { ElMessage } from 'element-plus'
import hostConfig from './config/host';//请求拦截配置
import {exitLogin} from './config/exit';//退出功能逻辑相关
const CancelToken = axios.CancelToken
const source = CancelToken.source()

//   创建axios实例
const INSTANCE = axios.create({...hostConfig})

// 添加请求拦截器
INSTANCE.interceptors.request.use(
  config => {
    config.cancelToken = source.token
    return config
  },
  error => {
    return error
  }
)

const exitCode = [401, 403];
const errCode = [401, 403]
const errText = process.env.NODE_ENV === 'production'? '登录过期,即将前往登录页面': 'dev:token过期'
// 添加响应拦截器
INSTANCE.interceptors.response.use(
  response => {
    if(response.status==200){//如果是正常结果
      if (response.data.code != 1) {//如果是不是正常结果 就抛错误
        ElMessage.error(response.data.message)
      } 
      return response.data
    } else if(exitCode.includes(response.status)) {  
      ElMessage.error(errText)
      source.cancel()
      exitLogin()
      return false
    } else{
      return response
    }
  },
  error => {
    if (axios.isCancel(error)) {// 取消请求的情况下,终端Promise调用链
      return error
    }
    if (error.response && errCode.includes(error.response.status)) {
      ElMessage.error(errText)
      source.cancel()
      exitLogin()
      return error/*  */
    }
    // 对响应错误做点什么`
    if (error.message == "timeout of 30000ms exceeded") {
      ElMessage.error('请求超时,请重试.');
    } else {
      ElMessage.error('网络异常,请稍后重试')
    }
    return error
  }
)

export default INSTANCE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值