axios请求方法二次封装

requestMessage.js

/**
  * @Descripttion: axios和操作提示的二次封装
  * @Author: lgen
*/
  
import Vue from 'vue'
import axios from 'axios'

/* 页面顶部弹出提示
 * @method showMsg
 * @param {String} text 提示的文字
 * @param {Number} icon 状态图标,1成功,2警告,3消息,4错误
 * @param {Number} duration 显示时间,毫秒,设为 0 则不会自动关闭
*/
const showMsg=(text,icon,duration)=>{
    let typeText=''
    switch(icon){
        case 1:
            typeText='success';
            break;
        case 2:
            typeText='warning';
            break;
        case 3:
            typeText='';
            break;
        default:
            typeText='error';
    }

    Vue.prototype.$message({
        message:text,
        type:typeText,
        duration:duration?duration:1000
    });
}

 /* 删除对象中的空值
 * @method deleteObjNull
 * @param {Object} obj 需要处理的对象
*/
const deleteObjNull=(obj)=>{
    for(let key in obj){
        if(obj[key]==='' || obj[key]===undefined || obj[key]===null){
            delete obj[key];
        }
    }
}

// 加载动画
let loading;
const openFullScreen=()=>{
    loading = Vue.prototype.$loading({
      lock: true,
      text: '加载中...',
      target:'.loadingBox', //Loading 需要覆盖的 DOM 节点
      spinner: 'el-icon-loading',
      background: 'rgba(255, 255, 255, 0.5)'
    });
}

//清除动画
const endLoading=()=>{
    loading.close();
}

// 请求配置
const instance=axios.create({
    timeout: 60000, //指定请求超时的毫秒数(0 表示无超时时间)
})

// 添加请求拦截器
instance.interceptors.request.use(config=>{
    // 在发送请求之前
    if(loading){
        // 如果存在动画,则先清除再执行新的动画
        endLoading(); //动画结束
    }
    openFullScreen(); //加载动画

    // 处理打包之后请求代理404错误
    if(config.url.includes('/other')){
        //接口1
        config.url=process.env.VUE_APP_OTHER+config.url.replace('/aa','');
    }else if(config.url.includes('/mall')){
        //接口2
        config.url=process.env.VUE_APP_MALL+config.url.replace('/bb','');
    }else if(config.url.includes('/design')){
        //接口3
        config.url=process.env.VUE_APP_DESIGN+config.url.replace('/cc','');
    }

    return config;
},error=>{
    // 请求出错
    setTimeout(() => {
        endLoading(); //动画结束
        showMsg('加载超时');
     },3000)

    return Promise.reject(error);
})

// 添加响应拦截器
instance.interceptors.response.use(response=>{
    endLoading(); //动画结束
    return response;
},error=>{
    // 响应出错
    setTimeout(() => {
        endLoading(); //动画结束
        showMsg('请求失败');
      },1000)

    return Promise.reject(error);
})

/* 统一axios请求方法的格式
 * @method axiosRequest
 * @param {String} url 请求的地址
 * @param {Object} data 请求参数
 * @param {Boolean} isForm 是否表单数据,含有文件上传
 * @param {String} type 请求类型
 * @return {Object} promise对象
*/
const axiosRequest=async (url='',data={},isForm=false,type='POST')=>{
    let result; //请求的返回值
    type = type.toUpperCase();
    deleteObjNull(data); // 删除请求参数中的空值

    // 如果是表单数据,进行处理
    if(isForm){
        let form=new FormData()
        Object.keys(data).forEach(key=>{
            form.append(key,data[key])
        })
        data=form
    }else{
        data=JSON.stringify(data)
    }

    // 请求配置
    let requestOptions={
        method:type,
        url:url,
        headers:{
            'Content-type':isForm ? 'multipart/form-data' : 'application/json'
        },
        params:type==='GET'?data:'',
        data:type!=='GET'?data:''
    }

    // 请求实例
    await instance(requestOptions).then(res=>{
        result=res;
    })
    return result;
}

export {
	showMsg,
	axiosRequest
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值