zoukankan      html  css  js  c++  java
  • axios配置

    import axios, { isCancel } from 'axios'
    import { md5 } from 'vux'
    import util from '@/libs/util'
    import store from '../../store'
    // 创建一个错误
    function errorCreate (e) {
      let err
      if (typeof e === 'string') {
        err = errorCreate(new Error(e))
      } else {
        err = {
          name: e.name,
          message: e.message,
          stack: e.stack,
          isCancel: isCancel(e)
        }
      }
      return err
    }
    
    // 组合conifg
    function formarConfig (config) {
      // 在请求发送之前做一些处理
      const token = util.cookies.get('token')
      const uid = util.cookies.get('uuid')
      const { data, url } = config
      return {
        ...config,
        url: ((token && uid) && `${url}?uid=${uid}&token=${token}`) || url,
        data: {
          data,
          apisign: md5(util.MD5_KEY + JSON.stringify(data))
        }
      }
    }
    
    export const checkLogin = () => {
      const token = util.cookies.get('token')
      if (!token || token === 'undefined') {
        return false
      }
      return true
    }
    
    function createService (url) {
      // 创建一个 axios 实例
      const service = axios.create({
        baseURL: url || process.env.VUE_BASE_URL,
        timeout: 30000 // 请求超时时间,
      })
    
      // 请求拦截器
      service.interceptors.request.use(
        config => {
          if (!config.forbidLoading) {
          
          }
    
          // 在请求发送之前做一些处理
          config = formarConfig(config)
          return config
        },
        error => {
          Promise.reject(error)
        }
      )
    
      // 响应拦截器
      service.interceptors.response.use(
        response => {
          // dataAxios 是 axios 返回数据中的 data
          const dataAxios = response.data
          // 这个状态码是和后端约定的
          const { status } = dataAxios
    
          store.dispatch('cptwebsite/loading/closeLoading')
          // 根据 code 进行判断
          if (status === '1' || status === '1027') {
            return [dataAxios.data, null, response]
          } else {
            if (status === '1010' || status === '1011') {
              
            }
            return [dataAxios.data, errorCreate(`${dataAxios.info}`), dataAxios]
          }
        },
        error => {
          
          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
            }
          }
          Promise.reject(error)
          return Promise.resolve([null, errorCreate(error), error.response])
        }
      )
    
      return service
    }
    export default createService
    

      

  • 相关阅读:
    第一周学习总结
    《淘宝网》质量属性分析
    软件架构师如何工作
    MVC模式
    Python学习
    echarts-数据的视觉映射
    热词展示
    热词关系图
    offset、client、scroll三个系列对比,是否有边框 padding?是否有单位?
    元素滚动 scroll系列属性 如果内容溢出盒子、scroll返回的是内容的大小 是否带边框、单位?
  • 原文地址:https://www.cnblogs.com/dhsz/p/11641419.html
Copyright © 2011-2022 走看看