axios二次封装 详细注释

别来无恙 提交于 2020-01-11 11:54:27
import axios from "axios"; //axios二次封装
import { Message } from "element-ui"; //引入element提示框
//简单封装一下提示框
const messbox = (txt, time = 1000) => {
    Message({
        showClose: true,
        message: txt,
        type: "error",
        duration: time
    });
};

// 创建axios实例,以免覆盖原来的axios
const v2api = axios.create({ timeout: 10000 });
//post请求的时候,需要加上一个请求头,所以在这统一加了
v2api.defaults.headers.common["Content-Type"] =
    "application/x-www-form-urlencoded";
v2api.defaults.transformRequest = data => {
    return JSON.stringify(data);
};
// 返回状态拦截,进行状态的集中判断
v2api.interceptors.response.use(
    response => {
        const res = response.data;
        if (res.success) {
            return Promise.resolve(res);
        } else {
            // 这里自己设置一些内部错误码处理
            if (res.code === 999) {
                messbox(res.message || "登录已过期,请重新登录!");
                /*router.replace({ path: `${BASE_URL}/login` });*/
            } else {
                // 默认的错误提示(不设置success/success=""就会出来)
                messbox(res.message || "网络异常,请稍后重试!");
            }
            return Promise.reject(res);
        }
    },
    error => {
        if (/timeout\sof\s\d+ms\sexceeded/.test(error.message)) {
            // 超时
            messbox("网络出了点问题,请稍后重试!");
        }
        if (error.response) {
            // 这里设置默认返回的http状态码判断
            switch (error.response.status) {
                // http status handler
                case 404:
                    messbox("请求的资源不存在!");
                    break;
                case 405:
                    messbox("请求的资源施工中!");
                    break;
                case 500:
                    messbox("内部错误,请稍后重试!");
                    break;
                case 503:
                    messbox("服务器正在维护,请稍等!");
                    break;
            }
        }
        return Promise.reject(error.response);
    }
);

// 处理get请求
const get = (url, params, config = {}) => v2api.get(url, {...config, params });
// 处理delete请求,为了防止和关键词delete冲突,方法名定义为deletes
const deletes = (url, params, config = {}) =>
    v2api.delete(url, {...config, params });
// 处理post请求
const post = (url, params, config = {}) => v2api.post(url, params, config);
// 处理put请求
const put = (url, params, config = {}) => v2api.put(url, params, config);
export default {
    get,
    deletes,
    post,
    put
};

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!