vue接口请求axios实例封装

const apiList = [
  'system/v2/markes',  // 马上获取留学方案表单提交接口
]

let urlStr, apiName, API = {}
apiList.forEach(path => {
  /**
  * apiName使用正则取到接口路径的最后一个子串,比如: markes即为接口调用方法名
  *
  * 使用方法:
  *  组件引入:import { API } from '~/assets/api/api.js';
  *  参数:data(要传的参数),method(请求方式默认GET请求如需post请求传入参数为post即可),url(请求接口域名如果不传默认使用公共域名baseURL)
  *  调用: 
  *      const datas={a:1,b:2}
  *      API.markes(datas).then((res) => {
  *        console.log(res.data);
  *      });
 */
  urlStr = path.indexOf("?") != -1;
  apiName = urlStr ? /(?<=\/)[^/]+$/.exec(path)[0].split('?')[0] : /(?<=\/)[^/]+$/.exec(path)[0];
  API[apiName] = (data = '', method = 'get', url = baseURL) => {
    if (method == 'post') {
      return axios.post(url + path, data)
    } else {
      if (urlStr) {
        return axios.get(url + path + utils.param(data))
      } else {
        return axios.get(url + path + '?' + utils.param(data))
      }
    }
  }
})
export { API }
function filter(str) { // 特殊字符转义
  str += ''; // 隐式转换
  str = str.replace(/%/g, '%25');
  str = str.replace(/\+/g, '%2B');
  str = str.replace(/ /g, '%20');
  str = str.replace(/\//g, '%2F');
  str = str.replace(/\?/g, '%3F');
  str = str.replace(/&/g, '%26');
  str = str.replace(/\=/g, '%3D');
  str = str.replace(/#/g, '%23');
  return str;
}
// 对象转换url地址参数方法
export const param = (paramObj) => {
  const sdata = [];
  for (let attr in paramObj) {
    sdata.push(`${attr}=${filter(paramObj[attr])}`);
  }
  return sdata.join('&');
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值