封装axios

import axios from 'axios';
import Qs from 'qs'; // 如果只是post请求就不需要引qs

/**
 * 封装的一个请求方法
 * @param path 请求路径
 * @param params 参数,对象形式 get请求也是对象形式
 * @param method POST,GET
 * @returns {Promise<unknown>}
 */
function request(path, params, method = 'GET') {
  let data = {};
  let newAxios = axios.create({}); // 根据指定配置创建一个新的 axios,也就是每个新 axios都有自己的配置

  // 设置请求头
  if (method === 'POST') {   // post请求
    newAxios.defaults.headers['Content-Type'] = 'application/json;charset=UTF-8';
    data = params;
  }

  if (method === 'GET') {  // get请求
    newAxios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
    if (JSON.stringify(params) !== '{}') {
      path = path + '?' + Qs.stringify(params);
    }
  }

  // 请求拦截
  newAxios.interceptors.request.use( (config) =>  {
    // 设置请求头可在此配置
    return config;
  }, (error) => {
    return Promise.reject(error);
  });

  // 响应拦截
  newAxios.interceptors.response.use(response => {
    if (response.status === 200) {
      return response.data.data;
    } else{
      return Promise.reject(response);
    }
  });

  // 发送请求
  return new Promise((resolve, reject) => {
    newAxios({
      method,
      url: path,
      data
    }).then(result => {
      resolve(result)
    }).catch(err => {
      reject(err)
    })
  })
}

export default request;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容