axios封装

class clientApi {
  axios_instance;
  axiosPromiseArr=[];
  /**
   * 初始化servers
   * @param hot
   */
  constructor(hot) {
    /**初始化请求实例*/
    this.axios_instance = axios.create({
      baseURL: `${hot}/`,
      withCredentials:true,
      timeout: 60000,
    });

    /**添加请求拦截器*/
    this.axios_instance.interceptors.request.use(
      config => {
          if (config.method === "post") {
          /**序列化
           * 若是提交能直接接受json 格式,可以不用 qs 来序列化的
           */
          if(config.data!=null) {
            /**判断是否是数组类型。如果是 那就不进行序列化*/
            if(!(config.data instanceof Array) && (config.data.NoSerial==null)){
              config.data = qs.stringify(config.data);
            }
          }
        }
        if(Auth.getToken()==null){
          config.headers['Authorization'] ='Basic ZHJpenpsZTpkcml6emxl';
        }
        else{
          config.headers['Authorization'] = 'Bearer ' + Auth.getToken();
        }
        return config;
      },
      error => {
        console.log(error.message,"error.message")
        /**对错误请求做处理*/
        return Promise.reject(error.message);
      });

    /**添加响应拦截器*/
    this.axios_instance.interceptors.response.use(
      response => {
        return response;
      },
      error => {
        /**对响应错误做处理*/
        if(!validate.validateNull(error.response)){
          /**根据返回状态匹配提示消息,匹配失败使用原始消息*/
          error.message = errorcode[error.response.status]||error.message;
          if(!validate.validateNull(error.response.data)) {
            /**根据返回错误码匹配提示消息,匹配失败用原始消息*/
            if (!validate.validateNull(error.response.data.error)) {
              error.message = errorcode[error.response.data.error] || error.message;
            }
            /**通过错误描述匹配提示消息,匹配失败使用原始消息*/
            if (!validate.validateNull(error.response.data.error_description)) {
              error.message = errorcode[error.response.data.error_description] || error.message;
            }
          }
          switch (error.response.status) {
            /**异常请求*/
            case 400:
              console.error(error.message);
              switch (error.response.data.error) {
                case "invalid_grant": {
                  /**认证异常*/
                  Msg.error(error.message);
                  break;
                }
              }
              break;
            /**认证异常*/
            case 401:
              console.error(error.message);
              Msg.error(error.message);
              switch (error.response.data.error) {
                case "invalid_token": {
                  /**token无效需要重新获取认证信息*/
                  store.dispatch('accountLogout').then(() => {
                      router.push('/login');
                    }
                  );
                  break;
                }
              }
              break;
            /**操作未授权*/
            case 403:
              ......
            /**页面不存在*/
            case 404:
                ......
            /**验证码异常*/
            case 488:
              ......
            /**内部服务器异常*/
            case 500:
              ......
            case 503:
              ......
            default:
              console.error(error.message);
              break;
          }
        }
        else{
          error.message = errorcode[error.message]||error.message;
          console.error(error.message);
        }
        return Promise.reject(error.message);
      }
    );
  }

   /**
   * request
   * @param method
   * @param url
   * @param body
   * @returns {Promise<any>}
   */
  request(method = 'GET', url, body) {
    if (typeof body !== 'object') body = {};
    method = method.toLocaleLowerCase();
    if (method === 'get') {
      url = `${url}?${qs.stringify(body)}`;
      body = {}
    }
    let value = this.axios_instance.request({
        url: url,
        method: method,
        data: body
      }
    );
    return Promise.resolve(value);
  }
  /**
   * request_export
   * @param method
   * @param url
   * @param body
   * @returns {Promise<any>}
   */
  request_export(method = 'GET', url, body) {
    if (typeof body !== 'object') body = {};
    method = method.toLocaleLowerCase();
    if (method === 'get') {
      url = `${url}?${qs.stringify(body)}`;
      body = {}
    }
    let value = this.axios_instance.request({
        url: url,
        method: method,
        data: body,
        responseType: 'arraybuffer'
      }
    );
    return Promise.resolve(value);
  }
  uploadFile(method = 'post', url, file) {
    method = method.toLocaleLowerCase(); 
      let param = new FormData();
      param.append('file', file);
      let value = this.axios_instance.request({
          url: url,
          method: method,
          data: param,
	//boundary分隔符,分隔多个文件、表单项。
         headers: {'Content-Type': 'multipart/form-data;boundary=---------------------------7d4a6d158c9'}
        }
      );
    return Promise.resolve(value);
  }


//最后要将对象暴露出去
export const client = new clientApi("base-url 地址"); 
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值