封装axios

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

/**
 * 封装的一个请求方法
 * @param path 请求路径
 * @param params 参数,对象形式 get请求也是对象形式
 * @param method POST,GET
 * @returns {Promise}
 */
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;

你可能感兴趣的:(封装axios)