Axios -- 项目中应用(拦截器、方法简单封装)

本文档介绍了如何在项目中创建axios目录,以及在index.js中设置axios拦截器和进行方法的简单封装,便于在controller中便捷使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

src目录下新建axios文件夹,axios目录下新建index.js文件

/**
 * axios 网络请求封装
 */
import axios from 'axios';
import Vue from 'vue';
import url from '../conf/http_conf';
import store from '../store';

const port = '';
const httpUrl = url + (port == '' ? '' : (':' + port)) + '/';

const instance = axios.create();

instance.defaults.baseURL = httpUrl;

// const isFormData = (v) => {
//     return Object.prototype.toString.call(v) === '[object FormData]';
// };

/**
 *axios 全局 拦截器
 */
instance.interceptors.response.use(function (response) {
    // 这里统一处理服务器code

    const Code = response.data.code;

    if (Code === undefined) {
        return response.data;
    }

    if (Code.toString().length === 3) {
        if (Code === 200) {
            return response.data.data;
        } else if (Code == 501) {
            console.error('后台服务出错');
            return Promise.reject(response.data);
        }
    } else if (Code.toString().length === 5) {
        // 自定义错误码
        if (Code === 25030) {
            Vue.prototype.$token = localStorage.token = '';

            store.commit('setToken', '');
            store.commit('setLoginStatus', false);

            // if (needAuth) {
            //     //判断该页面是否需要登录状态
            //     console.error('登录过期了');
            //     router.push({
            //         path: '/Login'
            //     });
            // }
            return Promise.reject(response.data);
        }
        // console.error('[' + Code + ']' + response.data.message);
        return Promise.reject(response.data);
    }
}, function (error) {
    console.error('网络出错了!');
    return Promise.reject(error.response.data);
});

/**
 * Request
 * @param {String} url
 * @param {Object} options request参数
 * @param {Boolean} tokenFlag 是否置入token,默认为true
 */
export const request = (url, options = {}, tokenFlag = true) => {
    if (tokenFlag) {
        // 置入token
        options.headers = {
            'token': Vue.prototype.$token,
            'uKey': Vue.prototype.$uKey
        };
    }
    options = {
        url,
        ...options
    };
    return instance.request(options);
};

/**
 * POST
 * @param {String} url
 * @param {Object} data data参数
 * @param {Boolean} tokenFlag 是否置入token,默认为true
 */
export const POST = (url, data = {}, tokenFlag = true) => {
    const options = {};
    if (tokenFlag) {
        // 置入token
        options.headers = {
            'token': Vue.prototype.$token,
            // 'Content-Type': 'application/x-www-form-urlencoded'
            'Content-Type': 'application/json',
            'requestType': '1',
            'uKey': Vue.prototype.$uKey
        };
    }
    // if (!isFormData(data)) data = qs.stringify(data);
    return instance.post(url, data, options);
};

/**
 * GET
 * @param {String} url
 * @param {Object} data data参数
 * @param {Boolean} tokenFlag 是否置入token,默认为true
 */
export const GET = (url, options = {}, tokenFlag = true) => {
    if (tokenFlag) {
        // 置入token
        options.headers = {
            'token': Vue.prototype.$token,
            'Content-Type': 'application/x-www-form-urlencoded',
            'uKey': Vue.prototype.$uKey
        };
    }
    return instance.get(url, options);
};

/**
 * PUT
 * @param {String} url
 * @param {Object} data data参数
 * @param {Boolean} tokenFlag 是否置入token,默认为true
 */
export const PUT = (url, params = {}, tokenFlag = true) => {
    const options = {};
    if (tokenFlag) {
        // 置入token
        options.headers = {
            'token': Vue.prototype.$token,
            'uKey': Vue.prototype.$uKey
        };
    }
    return instance.put(url, params, options);
};

/**
 * DELETE
 * @param {String} url
 * @param {Object} data data参数
 * @param {Boolean} tokenFlag 是否置入token,默认为true
 */
export const DELETE = (url, params = {}, tokenFlag = true) => {
    const options = {
        data: params
    };
    if (tokenFlag) {
        // 置入token
        options.headers = {
            'token': Vue.prototype.$token,
            'uKey': Vue.prototype.$uKey
        };
    }
    return instance.delete(url, options);
};

controller中使用

import {request, POST ,GET} from '@/axios/index';

const A_HANDLE = 'A-handle';
/**
 * 我的首页接口
 */

class name{
    // 调用POST方法
    apiPostMethod (params) {
        return POST(`${A_HANDLE }/api/xxxxxx`, params).then(res =>             
        res);
    };
    apiGetMethod () {
        return GET(`${A_HANDLE }/api/xxxxxx`, {}, false).then(res =>         
        res)
    }
    /**
     * 异步上传图片返回图片地址
     * @return {Promise}
     */
    uploadImage (file) {
        const formData = new FormData();
        formData.append('file', file);
        return request(`${A_HANDLE }/console/uploadImage`, {
            method: 'post',
            data: formData
        }).then(res => res);
    }
}

const controller = new name();

export default controller;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值