axios的封装


 

create实例,调用get或post方法,可通过interceptor设置对请求和响应的过滤

适用于小项目:

import axios from 'axios'

// 抛出错误
function errorLog(err) {
  const err = new Error(msg);
  throw err;
}
 //固定的URL
let serverURL = 'https://www.lxq/request' 

// 创建一个 axios 实例
const service = axios.create({
    baseURL: serverURL,
    timeout: 300000 // 请求超时时间
});

service.interceptors.request.use(
    config => {
        if (config.headers.pageType && config.headers.pageType === 'upload') {
            config.baseURL = 'https://www.ll./office/'
            return config
        }
        return config
    },
    error => {
        console.log(error);
        Promise.reject(error)
    }
);

// 响应拦截器
service.interceptors.response.use(
    response => {
        if (response.config.headers.RequestName) {
            return response;
        }
       // 状态码与后台约定
        const dataAxios = response.data;
        const {
            code
        } = dataAxios;
        // 根据 code 进行判断
        if (code === undefined) {
            return dataAxios
        } else {
            switch (code) {
                case 0:
                    // [ 示例 ] code === 0 代表没有错误
                    return dataAxios.data;
                case '1':
                    //
                    return dataAxios;
                default:
                    if (!dataAxios.message) {
                        errorCreat(`${dataAxios.msg}`)
                    } else {
                        errorCreat(`${dataAxios.message}`)
                    }
                    break
            }
        }
    },
    error => {
        if (error && error.response) {
            switch (error.response.status) {
                case 400:
                    error.message = '请求错误';
                    break;
                case 401:
                    error.message = '未授权,请登录';
                    break;
                case 403:
                    error.message = '拒绝访问';
                    break;
                case 404:
                    error.message = `404`;
                    break;
                case 408:
                    error.message = '请求超时';
                    break;
                case 500:
                    error.message = '服务器内部错误';
                    break;
                case 501:
                    error.message = '服务未实现';
                    break;
                case 502:
                    error.message = '网关错误';
                    break;
                case 503:
                    error.message = '服务不可用';
                    break;
                case 504:
                    error.message = '网关超时';
                    break;
                case 505:
                    error.message = 'HTTP版本不受支持';
                    break;
                default:
                    break
            }
        }
        return Promise.reject(error)
    }
);

export default service
vue