axios 封装

111 阅读1分钟
import axios from 'axios'
import { MessageBox, Message } from 'element-ui'


axios.defaults.headers.post["Content-Type"] = "application/json;charset=utf8";
const service = axios.create({
  withCredentials: true,
  timeout: 50000
})

service.interceptors.request.use(
  config => {
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

service.interceptors.response.use(
  response => {
    if (response.request.responseType == 'blob') {
      return response.data;
    }
    const res = response.data;
    if (res.code && res.code != '0000' && res.code != '200') {
      Message({
        message: res.msg || 'Error',
        type: 'error',
        duration: 5 * 1000
      })
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      return res
    }
  },
  error => {
    console.log('err' + error)
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

/**
 * @param {*} obj 请求参数对象
 * @property {String} method 请求方法名称
 * @property {String} url 请求地址
 * @property {Object} data 复杂请求(post、put)参数体
 * @property {Object} params 简单请求(get、delete)参数体
 * @property {Object} headers 请求头参数
 * @return {Promise}
 */
function http(obj) {
  let baseUrl = process.env.VUE_APP_BASE_API;

  return new Promise((resolve, reject) => {
    if (obj.method) {
      obj.method = obj.method.toLowerCase();
    } else {
      obj.method = "get";
    }

    if (["post", "put"].includes(obj.method) && obj.data) {
      if (
        obj.headers &&
        obj.headers["Content-Type"] &&
        obj.headers["Content-Type"].indexOf(
          "application/x-www-form-urlencoded"
        ) !== -1
      ) {
        obj.data = qs.stringify(obj.data);
      }
    }

    let url;
    if (/http/.test(obj.url)) {
      url = obj.url;
    } else {
      url = baseUrl + obj.url;
    }
    let params = {
      ...obj,
      url,
    };
    service(params)
      .then((response) => {
        resolve(response);
      })
      .catch((error) => {
        reject(error);
      });
  }).catch((e) => {
    console.log(e);
  });
}
export default http;