美文网首页
axios封装

axios封装

作者: Cherry9507 | 来源:发表于2021-05-18 10:34 被阅读0次

axios封装

import axios from 'axios'; // 引入axios
import QS from 'qs'; // 引入qs模块,用来序列化post类型的数据
import { Message } from 'element-ui';
import store from '../store'
import router from "../assets/js/router";
// 环境的切换
if (process.env.NODE_ENV == 'development') {
    axios.defaults.baseURL = serverUrl;
} else if (process.env.NODE_ENV == 'production') {
    // axios.defaults.baseURL = serverUrl
}

// 设置请求超时
axios.defaults.timeout = 10000;
// post请求头的设置
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
// 请求拦截器
axios.interceptors.request.use(
    config => {
        // 每次发送请求之前判断vuex中是否存在token        
        // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况
        // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断 
        const token = store.state.token;

        token && (config.headers.token = token);
        return config;
    },
    error => {
        return Promise.error(error);
    }
)

// 响应拦截器
axios.interceptors.response.use(
    response => {
        /**
         * 对返回结果做点处理
         * 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据 
         * 否则的话抛出错误
         */
        if (response.status === 200) {
            if (response.data.status == false) {
                Message.error(response.data.msg.msg)
                if (response.data.type == -1) {
                    router.push({ path: "/login" })
                }
                if (response.data.token != '') {
                    //更新token
                    store.commit('setToken', response.data.token)
                }
                return;
            }
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
    },
    // 错误状态码    
    error => {
        if (error.response.status) {
            switch (error.response.status) {
                case 401:

                    break;
                case 403:

                    setTimeout(() => {

                    }, 1000);
                    break;

                    // 404请求不存在
                case 404:

                    break;

                default:

            }
            return Promise.reject(error.response);
        }
    }
);
/**
 * get方法,对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params) {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params
        }).then(res => {
            resolve(res.data);
        }).catch(err => {
            reject(err.data)
        })
    });
}
/** 
 * post方法,对应post请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 */
export function post(url, params) {
    return new Promise((resolve, reject) => {
        axios.post(url, QS.stringify(params))
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}
同目录api调用
import {get, post } from './axios'

export const CheckUserInfo = data => get('/user/checkUserInfo', data);
export const demo2 = data => post('api/v1/users/my_address/address_edit_before', data);

相关文章

网友评论

      本文标题:axios封装

      本文链接:https://www.haomeiwen.com/subject/awyejltx.html