axios封装

vue2中axios封装

import axios from 'axios'
import { Message, Loading } from 'element-ui'
import router from '@/router'
let loadingInstance
// 创建一个错误
function errorCreate(msg) {
  const error = new Error(msg)
  // 显示提示
  Message({
    message: error.message,
    type: 'error',
    duration: 5 * 1000
  })
  throw error
}
// 创建一个 axios 实例
const service = axios.create()

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    loadingInstance = Loading.service({
      fullscreen: true,
      background: 'rgba(0,0,0,0.3)',
    })
    // 业务逻辑
    return config
  },
  (error) => {
    // 发送失败
    console.log(error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    loadingInstance.close()
    // 业务逻辑

    const data = response.data.body
    console.log('☞☞☞☞返回参数❥❥❥❥❥:', data)

    // dataAxios 是 axios 返回数据中的 data
    const dataAxios = response.data

    const { errorCode } = dataAxios.body

    if (errorCode === 'IM0009') {
      // 会话已失效,请重新登录
      router.replace({
        path: 'login',
        query: { redirect: router.currentRoute.fullPath },
      })
    }

    // 这个状态码是和后端约定的
    const { code } = dataAxios
    // 根据 code 进行判断
    // 有 code 代表这是一个后端接口 可以进行进一步的判断
    switch (code) {
      case 000000:
        // [ 示例 ] code === 0 代表没有错误
        return dataAxios.data
      case 'xxx':
        // [ 示例 ] 其它和后台约定的 code
        errorCreate(`[ code: xxx ] ${dataAxios.msg}: ${response.config.url}`)
        break
      default:
        // 不是正确的 code
        errorCreate(`${dataAxios.msg}: ${response.config.url}`)
        break
    }
  },
  (error) => {
    loadingInstance.close()
    if (error && error.response) {
      switch (error.response.status) {
        case 400:
          error.message = '请求错误'
          break
        case 401:
          error.message = '未授权,请登录'
          break
        case 403:
          error.message = '拒绝访问'
          break
        case 404:
          error.message = `请求地址出错: ${error.response.config.url}`
          break
        case 408:
          error.message = '请求超时'
          break
        case 500:
          error.message = '服务器内部错误'
          break
        case 501:
          error.message = '服务未实现'
          break
        case 502:
          error.message = '网关错误'
          break
        case 503:
          error.message = '服务不可用'
          break
        case 504:
          error.message = '网关超时'
          break
        case 505:
          error.message = 'HTTP版本不受支持'
          break
        default:
          break
      }
    }
    errorLog(error)
    return Promise.reject(error)
  }
)

export function request(config) {
  const configDefault = {
    timeout: 120000,
    baseURL: process.env.VUE_APP_API,
    data: {},
  }
  // 业务逻辑
  return service(Object.assign(configDefault, config))
}

posted @   shine_lovely  阅读(86)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示