简单封装axios

目录

一、代码解读

import axios from 'axios';

创建一个名为 instance 的 Axios 实例,配置默认的请求地址和超时时间

javascript 复制代码
const instance = axios.create({
    baseURL: 'http://localhost:8085',
    timeout: 5000,
});

请求拦截器,用于在请求发送前进行处理,比如在请求头中添加 token ,在请求发送之前,如果有需要,可以在请求头中加入认证信息

javascript 复制代码
instance.interceptors.request.use(
    (config) => {
        // config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`;
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

响应拦截器,用于统一处理后端返回的错误信息

javascript 复制代码
instance.interceptors.response.use(
    (response) => {
        // 对后端返回的数据进行统一处理
        const data = response.data;
        // 如果返回的状态码不是 200,则输出错误信息到控制台
        if (data.code !== 200) {
            console.error(`Error: ${data.message}`);
        }
        return data;
    },
    (error) => {
        // 处理响应错误,输出错误信息到控制台
        console.error('Response Error:', error);
        return Promise.reject(error);
    }
);

封装 GET 请求方法,支持传入请求地址和参数

javascript 复制代码
function get(url, params = {}) {
    return instance.get(url, { params });
}

封装 POST 请求方法,支持传入请求地址和数据

javascript 复制代码
function post(url, data = {}) {
    return instance.post(url, data);
}

封装上传文件的方法,支持传入请求地址和文件

javascript 复制代码
function uploadFile(url, file) {
    // 创建一个 FormData 对象,用于上传文件
    const formData = new FormData();
    formData.append('file', file);
    // 使用 POST 方法上传文件,并设置请求头的 Content-Type 为 multipart/form-data
    return instance.post(url, formData, {
        headers: {
            'Content-Type': 'multipart/form-data',
        },
    });
}

导出封装好的 GET、POST 和上传文件的方法

javascript 复制代码
export { get, post, uploadFile };

二、整体代码

javascript 复制代码
import axios from 'axios';

const instance = axios.create({
    baseURL: 'http://localhost:8085',
    timeout: 5000,
});

instance.interceptors.request.use(
    (config) => {
        // config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`;
        return config;
    },
    (error) => {
        return Promise.reject(error);
    }
);

instance.interceptors.response.use(
    (response) => {
        const data = response.data;
        if (data.code !== 200) {
            console.error(`Error: ${data.message}`);
        }
        return data;
    },
    (error) => {
        console.error('Response Error:', error);
        return Promise.reject(error);
    }
);

function get(url, params = {}) {
    return instance.get(url, { params });
}

function post(url, data = {}) {
    return instance.post(url, data);
}

function uploadFile(url, file) {
    const formData = new FormData();
    formData.append('file', file);
    return instance.post(url, formData, {
        headers: {
            'Content-Type': 'multipart/form-data',
        },
    });
}

export { get, post, uploadFile };
相关推荐
wangbing11256 分钟前
平台介绍-主数据系统-同步消息设计
java
程序员林北北14 分钟前
【前端进阶之旅】节流与防抖:前端性能优化的“安全带”与“稳定器”
前端·javascript·vue.js·react.js·typescript
小冷coding21 分钟前
【Java】最新Java高并发高可用平台技术选型指南(思路+全栈路线)
java·开发语言
寻星探路1 小时前
【前端基础】HTML + CSS + JavaScript 快速入门(三):JS 与 jQuery 实战
java·前端·javascript·css·c++·ai·html
cyforkk1 小时前
Tomcat 类加载机制解析:为何依赖包必须放在 WEB-INF/lib 目录下
java
JaJian.2 小时前
Java后端服务假死问题排查与解决
java·开发语言
救赎小恶魔2 小时前
C++算法(5)
java·c++·算法
未来之窗软件服务2 小时前
未来之窗昭和仙君(六十九)前端收银台行为异常检测—东方仙盟练气
前端·仙盟创梦ide·东方仙盟·昭和仙君
大叔编程奋斗记2 小时前
两个日期间的相隔年月计算
前端·salesforce
重生之后端学习2 小时前
236. 二叉树的最近公共祖先
java·数据结构·算法·职场和发展·深度优先