axios数据请求封装promise

import {Notification} from 'element-ui';
import axios from 'axios'
import md5 from 'js-md5'
import sessionSave from "./sessionSave";
import publicMethod from "./publicMethod";

/**
 * 创建ajax数据请求
 * @type {AxiosInstance}
 */
const $axios = axios.create({
  // 请求过期时间
  timeout: 30000,
  responseType: 'json'
});
axios.defaults.withCredentials = true;
/**
 * 校验返回数据
 * @param data 返回数据
 * @returns {{code: number, data: null, msg: string}}
 */
const checkStatus = ({data = {code: 404, data: null, msg: '服务地址错误'}}) => {
  return data
};

// 请求拦截器
axios.interceptors.request.use(config => {
  return config
}, error => {
  return Promise.reject(error)
});

// 响应拦截
$axios.interceptors.response.use(response => {
  return checkStatus(response)
}, () => {
  return checkStatus({status: 404, data: {msg: '服务异常', data: null, code: 404}});
});
/**
 * 发送http数据请求
 * @param url 请求类型地址
 * @param params 上传参数
 * @param method 上传方式
 * @param fileInfo 文件信息
 * @returns {Promise}
 */
const sendHttpClient = (url, params, method) => {
  return new Promise((resolve, reject) => {
    const config = {
      method: method,
      url: url,
      data: method==='POST'?params:null,
      params:method==='GET'?params:null,
      header: {
        'Content-type': 'application/json;charset=utf-8'
      },
      crossDomain: true,
      xhrFields: {
        withCredentials: true
      }
    };
    $axios(config).then((result) => {
      resolve(result)
    }).catch((error) => {
      reject(error)
    })
  })
};
/**
 * httpPost 数据请求
 * @param url 数据请求地址
 * @param params 请求参数
 * @param fileInfo 上传文件信息
 */
const post = async (url, params) => {
  window['openLoad']();
  const result = await sendHttpClient(url, params, "POST");
  window['closeLoad']();
  const {code, msg, data} = result || {code: 500, msg: '服务异常', data: null};
  if (code === 0) {
    return data || true;
  } else {
    Notification[code === 404 ? "error" : 'warning']({title: '服务异常', message: msg, duration: 1000});
    return null;
  }
};
export default {
  post
}

你可能感兴趣的:(vue)