axios接口

import axios from 'axios';
import qs from 'qs';
import { MessageBox } from 'element-ui';
import router from 'router/index';

let hasConfirm = false;
// axios 配置
axios.defaults.withCredentials = true;
axios.defaults.timeout = 120000;
// 根据实际情况,调整为服务器地址
axios.defaults.baseURL = '/api';

// http request 拦截器
axios.interceptors.request.use(
    config => {
        let token = sessionStorage.getItem('token');
        if (token) {
            config.headers.Authorization = token;
        }
        else {
            // 重定向到登录页面
            router.push('/login')
        }
        return config;
    },
    err => {
        return Promise.reject(err);
    }
);
// http response 拦截器
axios.interceptors.response.use(
    response => {
        return response;
    },
    error => {
        let response = error.response;
        let customRsp = {
            code: 500
        };

        if (response) {
            switch (response.status) {
                case 401: // 未登录
                    router.push({ path: '/login' });
                    customRsp.code = 200;
                    break;
                case 400:
                    customRsp.msg = '服务器不理解的请求语法';
                    break;
                case 404:
                    customRsp.msg = '网络请求不存在,请联系管理员';
                    break;
                case 500:
                    customRsp.msg = '服务器内部异常,请联系管理员';
                    break;
                case 502:
                    customRsp.msg = '服务器网络异常,请联系管理员';
                    break;
                case 504:
                    customRsp.msg = '服务器网关请求超时,请联系管理员';
                    break;
            }
        }
        return Promise.reject(customRsp); // 返回接口返回的错误信息
    }
);

function checkStatus(response) {
    return new Promise((resolve, reject) => {
        if (response.status === 200) {
            if (response.data.code === 401 && !hasConfirm) {
                hasConfirm = true;
                MessageBox.confirm('登陆超时是否重新登录?', '提示', {
                    distinguishCancelAndClose: true,
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning'
                }).then(() => {
                    sessionStorage.removeItem('token');
                    hasConfirm = false;
                    router.push({ path: '/login' });
                    window.location.reload();
                }).catch(() => {
                    hasConfirm = false;
                });
            }
            if (response.data.code) {
                if (response.data.code == 200) {
                    resolve(response.data);
                } else if (response.data.code == 401) { } else {
                    reject(response.data);
                }
            } else {
                if (response.config.responseType == 'blob') {
                    resolve(response);
                } else {
                    resolve(response.data);
                }
            }
        } else {
            reject(response.data);
        }
    });
}

export default {
    post(url, data) {
        let obj = data;

        return axios({
            method: 'post',
            url,
            data: qs.stringify(obj),
            headers: {
                'X-Requested-With': 'XMLHttpRequest',
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                'Authorization': sessionStorage.getItem('token')
            }
        }).then(checkStatus);
    },

    postForJson(url, data) {
        return axios({
            method: 'post',
            url,
            data: JSON.stringify(data),
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json; charset=UTF-8',
                'Authorization': sessionStorage.getItem('token')

            }
        }).then(checkStatus);
    },
    get(url, params) {
        let obj = params;
        let newUrl = url + '?t=' + Date.now();
        return axios({
            method: 'get',
            url: newUrl,
            params: obj,
            headers: {
                'X-Requested-With': 'XMLHttpRequest',
                'Authorization': sessionStorage.getItem('token')
            }
        }).then(checkStatus);
    },
    put(url, params) {
        let obj = params;

        return axios({
            method: 'put',
            url,
            params: obj,
            headers: {
                'X-Requested-With': 'XMLHttpRequest',
                'Authorization': sessionStorage.getItem('token')
            }
        }).then(checkStatus);
    },
    delete(url, params) {
        let obj = params;
        return axios({
            method: 'delete',
            url,
            params: obj,
            headers: {
                'X-Requested-With': 'XMLHttpRequest',
                'Authorization': sessionStorage.getItem('token')
            }
        }).then(checkStatus);
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值