zoukankan      html  css  js  c++  java
  • axios和fetch的封装

    axios

    import axios from 'axios';
    import qs from 'qs';
    /* 全局默认 */
    switch (process.env.NODE_ENV) {
        case 'production':
            axios.defaults.baseURL = "api.abcdef.com";
            break;
        case 'test':
            axios.defaults.baseURL = "192.168.20.21";
            break;
        default:
            axios.defaults.baseURL = "127.0.0.1"
    }
    
    /* 超时时间 */
    axios.defaults.timeout = 10000;
    /* 允许携带凭证 */
    axios.defaults.withCredentials = true;
    /* 传递数据格式(假设urlencode) */
    axios.defaults.headers['Content-Type'] = 'application/x-www-urlencoded';
    axios.defaults.transformRequest = data => {
        qs.stringify(data);
    };
    /* 请求拦截器 */
    axios.interceptors.request.use(config => {
        const token = localStorage.getItem('token');
        config.headers.Authorization = token;
        return config;
    }, err => {
        return Promise.reject(err);
    })
    /* 响应拦截器 */
    axios.defaults.validateStatus = status => {
        return /^(2|3)d{2}$/.test(status);
    }
    axios.interceptors.response.use(res => {
        return res.data;
    }, err => {
        let { response } = err;
        if (response) {
            // 根据状态码返回结果
            switch (response.status) {
                case 401:
                    //...
                    break;
                case 403:
                    //...
                    break;
                case 404:
                    //...
                    break;
            }
        } else {
            /* 没网 */
            if (!window.navigator.onLine) {
                //跳转到断网页面
                return;
            } else {
                return Promise.reject(err);
            }
        }
    })
    
    export default axios;
    

    fetch

    import qs from 'qs';
    
    let baseURL = '';
    switch (process.env.NODE_ENV) {
        case 'production':
            baseURL = "api.abcdef.com"
            break;
        case 'test':
            baseURL = "192.168.0.0.1";
            break;
        default:
            baseURL = "127.0.0.1";
            break;
    }
    
    export default (url, options = {}) => {
        url = baseURL + url;
        !options.method ? options.method = 'GET' : null;
        // params处理
        if (options.hasOwnProperty('params')) {
            if (/^(GET|DELETE|HEAD|OPTIONS)$/i.test(options.params)) {
                const ask = url.includes('?') ? '&' : '?';
                url + `${ask}${qs.stringify(params)}`;
            }
            delete options.params;
        }
        //合并配置
        options = Object.assign({
            credentials: 'include',//资源凭证
            headers: {}
        }, options);
        options.headers.Accept = "application/json";
        //token校验
        const token = localStorage.getItem('token');
        options.headers.Authorization = token;
        //post请求
        if (/^(POST|PUT)$/i.test(options.method)) {
            !options.type ? options.type = 'urlencoded' : null;
            if (options.type === 'urlencoded') {
                options.headers['Content-Type'] = 'application/x-www-urlencoded';
                options.body = qs.stringify(options.body);
            }
            else if (options.type === 'json') {
                options.headers['Content-Type'] = 'application/json';
                options.body = JSON.stringify(options.body);
            }
            //...
        }
        // fetch
        return fetch(url, options).then(res => {
            /* 非200状态码 */
            if (!/^(2|3)d{2}$/.test(res.status)) {
                switch (res.status) {
                    case 401:
                        //...
                        break;
                    case 404:
                        //...
                        break;
                    default:
                        //...
                        break;
                }
                return Promise.reject(res);
            }
            return res.json();
        }).catch(err => {
            if (!window.navigator.onLine) {
                return;
            }
            return Promise.reject(err);
        })
    }
    
  • 相关阅读:
    前端性能优化
    CSS实现文字在容器中对齐方式
    spring里面的context:component-scan
    Builder模式
    idea无法新建maven项目
    Java-位运算
    pg数据库数据表异常挂起
    Java-多线程与单例
    Java-数据结构之二叉树练习
    Java-JNA使用心得
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/13234523.html
Copyright © 2011-2022 走看看