axios封装学习

首先是看这篇博客:

https://juejin.cn/post/6876993324159500301

 

然后根据axios官网:

import axios from 'axios';
import { Toast } from 'vant'

// 统一请求路径前缀
let base = '/api';

// `headers` 是即将被发送的自定义请求头
// headers: {'X-Requested-With': 'XMLHttpRequest'},
// axios.defaults.headers.common[''] = ''

// 接口环境地址
let API_ROOT = process.env.API_ROOT

// 超时设定
axios.defaults.timeout = 15000;
// 跨域访问携带cookie
axios.defaults.withCredentials = true

axios.interceptors.request.use(config => {
    // 在发送请求之前做些什么
    return config;
}, err => {
    // 对请求错误做些什么
    Toast('请求超时');    
    return Promise.resolve(err);
});

// http response 拦截器
// 对响应数据做点什么
axios.interceptors.response.use(response => {
    const data = response.data;
    // 根据返回的code值来做不同的处理(和后端约定)
    switch (data.code) {
        case 210:
            Toast(data.message);
            break;
        // 错误
        case 500:            
            Toast("联系管理员");
            break;
        default:
            return data;
    }
    return data;
}, (err) => {
    // 返回状态码不为200时候的错误处理
    Toast('连接错误,请重试');
    return Promise.resolve(err);
});

// 移除拦截器
// const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
// axios.interceptors.request.eject(myInterceptor);

// get 请求
export const getRequest = (url, params) => {
    let accessToken = getStore('accessToken');
    return axios({
        method: 'get',
        url: `${API_ROOT}${base}${url}`,
        params: params,
        headers: {
            'accessToken': accessToken
        }
    });
};

// post请求
export const postRequest = (url, params) => {
    let accessToken = getStore("accessToken");
    return axios({
        method: 'post',
        url: `${API_ROOT}${base}${url}`,
        data: params,
        transformRequest: [function (data) {
            let ret = '';
            for (let it in data) {
                ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
            }
            ret = ret.substring(0, ret.length - 1);
            return ret;
        }],
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'accessToken': accessToken
        }
    });
};

export const putRequest = (url, params) => {
    // let accessToken = getStore("accessToken");
    return axios({
        method: 'put',
        url: `${API_ROOT}${base}${url}`,
        data: params,
        transformRequest: [function (data) {
            let ret = '';
            for (let it in data) {
                ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
            }
            ret = ret.substring(0, ret.length - 1);
            return ret;
        }],
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'accessToken': accessToken
        }
    });
};

export const deleteRequest = (url, params) => {
    let accessToken = getStore('accessToken');
    return axios({
        method: 'delete',
        url: `${API_ROOT}${base}${url}`,
        params: params,
        headers: {
           'accessToken': accessToken
        }
    });
};

/**
 * 无需token验证的请求 避免旧token过期导致请求失败
 * @param{*}url
 * @param{*}params
 */
export const getRequestWithNoToken = (url, params) => {
    return axios({
        method: 'get',
        url: `${API_ROOT}${base}${url}`,
        params: params
    });
};

 

import axios from 'axios';
import { Toast } from 'vant'

// 统一请求路径前缀
let base = '/api';

// `headers` 是即将被发送的自定义请求头
// headers: {'X-Requested-With': 'XMLHttpRequest'},
// axios.defaults.headers.common[''] = ''

// 接口环境地址
let API_ROOT = process.env.API_ROOT

// 超时设定
axios.defaults.timeout = 15000;
// 跨域访问携带cookie
axios.defaults.withCredentials = true

axios.interceptors.request.use(config => {
    // 在发送请求之前做些什么
    return config;
}, err => {
    // 对请求错误做些什么
    Toast('请求超时');    
    return Promise.resolve(err);
});

// http response 拦截器
// 对响应数据做点什么
axios.interceptors.response.use(response => {
    const data = response.data;
    // 根据返回的code值来做不同的处理(和后端约定)
    switch (data.code) {
        case 210:
            Toast(data.message);
            break;
        // 错误
        case 500:            
            Toast("联系管理员");
            break;
        default:
            return data;
    }
    return data;
}, (err) => {
    // 返回状态码不为200时候的错误处理
    Toast('连接错误,请重试');
    return Promise.resolve(err);
});

// 移除拦截器
// const myInterceptor = axios.interceptors.request.use(function () {/*...*/});
// axios.interceptors.request.eject(myInterceptor);

// get 请求
export const getRequest = (url, params) => {
    let accessToken = getStore('accessToken');
    return axios({
        method: 'get',
        url: `${API_ROOT}${base}${url}`,
        params: params,
        headers: {
            'accessToken': accessToken
        }
    });
};

// post请求
export const postRequest = (url, params) => {
    let accessToken = getStore("accessToken");
    return axios({
        method: 'post',
        url: `${API_ROOT}${base}${url}`,
        data: params,
        transformRequest: [function (data) {
            let ret = '';
            for (let it in data) {
                ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
            }
            ret = ret.substring(0, ret.length - 1);
            return ret;
        }],
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'accessToken': accessToken
        }
    });
};

export const putRequest = (url, params) => {
    // let accessToken = getStore("accessToken");
    return axios({
        method: 'put',
        url: `${API_ROOT}${base}${url}`,
        data: params,
        transformRequest: [function (data) {
            let ret = '';
            for (let it in data) {
                ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&';
            }
            ret = ret.substring(0, ret.length - 1);
            return ret;
        }],
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded',
            'accessToken': accessToken
        }
    });
};

export const deleteRequest = (url, params) => {
    let accessToken = getStore('accessToken');
    return axios({
        method: 'delete',
        url: `${API_ROOT}${base}${url}`,
        params: params,
        headers: {
           'accessToken': accessToken
        }
    });
};

/**
 * 无需token验证的请求 避免旧token过期导致请求失败
 * @param{*}url
 * @param{*}params
 */
export const getRequestWithNoToken = (url, params) => {
    return axios({
        method: 'get',
        url: `${API_ROOT}${base}${url}`,
        params: params
    });
};

posted on 2022-04-02 10:47  蜀风古韵  阅读(105)  评论(0)    收藏  举报

导航