// 使用时候的优化

|

// 定义 所有请求都要通过这个函数来进行处理...
export const getContents = async (data) => {
  try {
    let res = await axios.request({
      url: `${apiPrefix}/getContents`,
      data,
      method: 'post',
    })
    console.log('await res=', res)
  } catch (err) {
    console.warn('await rej=', err)
  }
}
// 1.1.0版
// 定义 所有请求都要通过这个函数来进行处理...
export const requestApi = async ({ url, data, method }) => {
  console.log(url, data, method)
  try {
    let res = await axios.request({
      url,
      data,
      method,
    })
    console.log('res', res)
    if (res.status === 200) {
      console.log('this', this)
      // 直接返回了res.data
      return res.data;
    } else {
      // 错误信息就不用返回给前台处理了.
      console.warn('err', res)
      console.log('this',this);// 无 this
      // 通过调用某处方法 将全局modal对话框显示...
      // 对于其他错误码的提示...
    }
  } catch (err) {
    // 这里处理 请求响应的错误 通常来自于服务端
    console.warn('await rej=', err)
  }
}
// 定义接口
export const getContents = (data) => {
  return requestApi({
    url: `${apiPrefix}/getContents`,
    data,
    method: 'post',
  })
}

|

// 导入函数 res即 status为200时的结果
let res = getContents(params)
console.log('请求成功',res);
res.then(res => {
  console.log('then成功',res);
})

// 在axios封装处 处理方案.

|

import axios from 'axios'
import store from '@/store'
import qs from 'qs'

// 错误收集... todo 未来是否有 错误监控?
const addErrorLog = errorInfo => {
  const { statusText, status, request: { responseURL } } = errorInfo
  let info = {
    type: 'ajax',
    code: status,
    mes: statusText,
    url: responseURL
  }
  // if (!responseURL.includes('save_error_logger')) store.dispatch('addErrorLog', info)
}

class HttpRequest {
  constructor (baseUrl = '') {
    this.baseUrl = baseUrl
    this.queue = {}
  }
  getInsideConfig () {
    const config = {
      baseURL: this.baseUrl,
      headers: {
        // 'Content-Type': 'application/x-www-form-urlencoded'
      },

    }
    return config
  }
  destroy (url) {
    delete this.queue[url]
    if (!Object.keys(this.queue).length) {
      // Spin.hide()
    }
  }
  interceptors (instance, url) {


    // 请求拦截
    instance.interceptors.request.use(config => {
          // config配置
        return config
    }, error => {
          return Promise.reject(error)
    })
    // 响应拦截
    instance.interceptors.response.use(res => {
          if (response.data.status === 200) {   //服务端定义的响应status码为0时请求成功
              return Promise.resolve(response.data) //使用Promise.resolve 正常响应
        } else if (response.data.status === 404) { //服务端定义的响应status码为404时为未登录
              store.dispatch('setUserInfo', {})
            // 对于相应失败的情况下  这里我们考虑 写一个message/modal组件 可以使用函数式调用 以便 用来弹出错误信息....不然的话每个请求里都是需要这么定义 比较麻烦
              Message({
                message: '未登录'
              })
              // router.push('/login')
              return Promise.reject(response.data)    //使用Promise.reject 抛出错误和异常
        } else {
             return Promise.reject(response.data)
        }
    }, error => {
      if (error && error.response) {
          let res = {}
          res.code = error.response.status
          res.msg = throwErr(error.response.status, error.response) //throwErr 捕捉服务端的http状态码 定义在utils工具类的方法
        addErrorLog(error.response) // 错误收集
          return Promise.reject(res)
      }
        return Promise.reject(error)
    })
  }
  request (options) {
    const instance = axios.create();
    options = Object.assign(this.getInsideConfig(), options)
    this.interceptors(instance, options.url)
    if (options.method === 'post' && options.data !== undefined) {
      options.data = qs.stringify(options.data);
    }
    return instance(options)
  }
}
export default HttpRequest

|

//axios捕错
export const throwErr = (code, response) => {
  let message = '请求错误'
  switch (code) {
    case 400:
      message = '请求错误'
      break
    case 401:
      message = '未授权,请登录'
      break
    case 403:
      message = '拒绝访问'
      break
    case 404:
      message = `请求地址出错: ${response.config.url}`
      break
    case 408:
      message = '请求超时'
      break
    case 500:
      message = '服务器内部错误'
      break
    case 501:
      message = '服务未实现'
      break
    case 502:
      message = '网关错误'
      break
    case 503:
      message = '服务不可用'
      break
    case 504:
      message = '网关超时'
      break
    case 505:
      message = 'HTTP版本不受支持'
      break
    default:
  }
  return message
最后修改:2023 年 03 月 06 日
如果觉得我的文章对你有用,请随意赞赏