zoukankan      html  css  js  c++  java
  • 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))
    }
    
    
  • 相关阅读:
    Dynamics CRM安装教程一:域环境准备
    C#判断日期是否合法
    Visual Studio 2015 无法加载.Net FrameWork4.6.2
    Dynamics CRM产生公共签名,避免每次插件换环境重新输入签名密钥账号密码
    Dynamics CRM使用JS隐藏自定义按钮
    <3>Python开发——列表(list)
    <2>Python开发——字符串(str)
    <1>Python开发——基础入门
    Sed命令详解
    国内搭建Minikube测试环境
  • 原文地址:https://www.cnblogs.com/shine-lovely/p/15069425.html
Copyright © 2011-2022 走看看