axios 预配置

1 篇文章 0 订阅

大家都知道,axios预配置不外乎三件事

  • 第一处理post请求,以及参数为数组的处理
  • 第二增加loading配置
  • 第三异常情况处理,公共参数处理

下边我一一细说下

post处理,业界 公认三种方式

  • 使用axios自带的 transformRequest,在请求发送前将请求数据进行转换
 // global set axios
  axios.defaults.headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
  };
  // eslint-disable-next-line
  axios.defaults.transformRequest = [function (data) {
    // 对post传参进行处理,Object,Array 会被 JSON.stringify 处理
    let newData = '';
    // eslint-disable-next-line
    for (let k in data) {
      newData += `&${encodeURIComponent(k)}=${encodeURIComponent((typeOf(data[k]) === 'object') ? JSON.stringify(data[k]) : data[k])}`;
    }
    if (newData.indexOf('&') === 0) {
      newData = newData.substring(1);
    }
    return newData;
  }];

这个需要手动处理对象数组,否则后端不识别

  • 如果使用模块化开发,可以使用qs模块进行转换
if (config.method === 'post') {
	config.data = qs.stringify(config.data)
 }
  • new URLSearchParams()
var params = new URLSearchParams();
params.append('a', 'value1');
params.append('b', 'value2');
axios.post('/url', params);

loading配置

axios.interceptors.request.use(config => {
    if (!config.noloading) {//考虑到有些情况不需要loading,自定义loading配置
      Indicator.open()
    }
 }
axios.interceptors.response.use(response => {
    Indicator.close()
}
  • 异常处理
axios.interceptors.response.use(response => {
    Indicator.close()
    if (response.data.errno === 0 || response.data.errno === 140002) {
      return response
    } else {
      Toast(response.data.errmsg)
    }
  }, error => {
    Toast('系统错误')
    return Promise.resolve(error.response)
  })
  • 公共处理
	let commonParams = {}
    let datas = config.data || {}
    Object.assign(datas, commonParams)
    config.data = datas
  • 完整代码
import qs from 'qs'
import {Toast, Indicator} from 'mint-ui'
const plugin = {}

plugin.install = (Vue, axios) => {
  if (plugin.installed || !axios) {
    return
  }
  plugin.installed = true
  // bind axios to Vue
  Vue.axios = axios
  Object.defineProperties(Vue.prototype, {
    axios: {
      get () {
        return axios
      }
    },
    $http: {
      get () {
        return axios
      }
    }
  })

  axios.interceptors.request.use(config => {
    if (!config.noloading) {
      Indicator.open()
    }
    let commonParams = {}
    let datas = config.data || {}
    Object.assign(datas, commonParams)
    config.data = datas
    if (config.method === 'post') {
      config.data = qs.stringify(config.data)
    }
    return config
  }, error => {
    return Promise.reject(error)
  })

  axios.interceptors.response.use(response => {
    Indicator.close()
    if (response.data.errno === 0) {
      return response
    } else {
      Toast(response.data.errmsg)
    }
  }, error => {
    Toast('系统错误')
    return Promise.resolve(error.response)
  })
}
export default plugin

参考地址:https://github.com/axios/axios#using-applicationx-www-form-urlencoded-format

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值