[前端] axios网络请求二次封装

server/2025/2/12 9:38:58/

一、场景描述

为什么要对axios网络请求进行二次封装?
解决代码的复用,提高可维护性。 —这个有两个方案:一个是二次封装一个是实例化。(设置一些公共的参数,然后进行请求)
为什么可以解决代码的复用:
这是最简单格式的代码,需要定义url和请求方式。

axios({method: "get",url: "http://codercba.com:9002/banner",
}).then(function (response) {console.log(response);
}).catch(function (error) {console.log(error);
});

封装之后的请求方式,减少了点代码

    hyRequest.get({ url: "/banner" }).then((res) => {console.log(res);setImg(res.banners);console.log(img);});

Axios实例化的输出

const instance = axios.create({baseURL: "http://codercba.com:9002",
});instance.get("banner").then((response) => {console.log("实例化请求输出");console.log(response);
});

二、二次封装的代码实现

type.ts //定义一些类型

import type {InternalAxiosRequestConfig,AxiosRequestConfig,AxiosResponse,AxiosRequestHeaders,
} from "axios";export interface HYInterceptors<T = AxiosResponse> {   //定义拦截器类型requestSuccessFn?: (config: InternalAxiosRequestConfig) => InternalAxiosRequestConfig;requestFailureFn?: (err: any) => any;responseSuccessFn?: (res: T) => T;responseFailureFn?: (err: any) => any;
}export interface HYRequestConfig<T = AxiosResponse> extends AxiosRequestConfig {      //定义请求体的配置   interceptors?: HYInterceptors<T>;headers?: AxiosRequestHeaders;
}

request.ts //封装axios

import axios, { InternalAxiosRequestConfig } from "axios";
import type { AxiosInstance } from "axios";
import type { HYRequestConfig } from "./type";class HYRequest {instance: AxiosInstance;     //实例constructor(config: HYRequestConfig) {   this.instance = axios.create(config);     //实例化axiosthis.instance.interceptors.response.use((config) => {return config;},(err) => {return err;});this.instance.interceptors.response.use((res) => {return res.data;},(err) => {return err;});this.instance.interceptors.request.use(config.interceptors?.requestSuccessFn,config.interceptors?.requestFailureFn);this.instance.interceptors.response.use(config.interceptors?.responseSuccessFn,config.interceptors?.responseFailureFn);}request<T = any>(config: HYRequestConfig<T>) {if (config.interceptors?.requestSuccessFn) {config = config.interceptors.requestSuccessFn(config as InternalAxiosRequestConfig);}return new Promise<T>((resolve, reject) => {this.instance      //实例请求 .request<any, T>(config).then((res) => {if (config.interceptors?.responseSuccessFn) {res = config.interceptors.responseSuccessFn(res);}resolve(res);}).catch((err) => {reject(err);});});}get<T = any>(config: HYRequestConfig<T>) {return this.request({ ...config, method: "GET" });}post<T = any>(config: HYRequestConfig<T>) {return this.request({ ...config, method: "POST" });}delete<T = any>(config: HYRequestConfig<T>) {return this.request({ ...config, method: "DELETE" });}patch<T = any>(config: HYRequestConfig<T>) {return this.request({ ...config, method: "PATCH" });}
}export default HYRequest;

index.ts //实例化

import { BASE_URL, TIME_OUT } from "./config";
import HYRequest from "./request";const hyRequest = new HYRequest({baseURL: BASE_URL,timeout: TIME_OUT,interceptors: {requestSuccessFn: (config) => {return config;},},
});export default hyRequest;

可以看到其实封装也是先实例化之后再进行封装。为什么要这么做,实例化的东西不太好维护。包括对拦截器的更新。
在这里插入图片描述
三、axios相关内容
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/server/167017.html

相关文章

日志2025.2.11

日志2025.2.11 1.增加了敌人滚动这个特殊技能 //具有翻滚技能的敌人实现翻滚 public void ActivateDodgeRoll() { if(meleeType ! EnemyType_Melee.Dodge) { return; } if(stateMachine.currentState ! chaseState) { …

【论文笔记】Are Self-Attentions Effective for Time Series Forecasting? (NeurIPS 2024)

官方代码https://github.com/dongbeank/CATS Abstract 时间序列预测在多领域极为关键&#xff0c;Transformer 虽推进了该领域发展&#xff0c;但有效性尚存争议&#xff0c;有研究表明简单线性模型有时表现更优。本文聚焦于自注意力机制在时间序列预测中的作用&#xff0c;提…

【Bug】属性 PackageVersion 应在所有目标框架中具有单个值,但却具有以下值

文章目录 问题问题代码原因解决处理Bug的具体步骤 问题 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) NU1105 无法读取“x”的项目信息: 属性 PackageVersion 应在所有目标框架中具有单个值&#xff0c;但却具有以下值: 1.0.0, 1.0.5 x (net8.0-android), x (net8.…

关于“前端已死”的命题

翻阅知乎论坛&#xff0c;看了各位大佬的解析&#xff0c;从技术发展、市场环境、岗位需求三个维度综合理解这个命题&#xff1a; 1. 技术层面 前端技术生态并未停滞&#xff0c;反而持续迭代升级。HTML/CSS/JavaScript 核心基础未变&#xff0c;但框架&#xff08;如 Vue、R…

Python查询成交量

#!/usr/bin/env python # encoding: utf-8author: yfh file: increaseVolumeModularSecond.py time: 2025/2/11 20:23 import baostock as bs import pandas as pd from datetime import datetime, timedelta# 登录baostock系统 def login_baostock():lg bs.login()if lg.erro…

京东商品评论数据采集并可视化

2 DrissionPage 在网页自动化操作场景中,使用 DrissionPage 实现一次登录后可在后续操作中复用登录状态,具有显著优势,下面详细介绍相关好处: 1. 节省时间与资源 减少登录操作时间:很多网站的登录流程可能涉及验证码输入、短信验证等步骤,这些操作不仅繁琐,还会消耗大…

如何借鉴GitHub开源项目进行LabVIEW开发

在设备开发过程中&#xff0c;许多开发者选择借鉴GitHub等平台上的开源项目&#xff0c;特别是当目标程序没有LabVIEW版本时。比如&#xff0c;在本例中&#xff0c;我们看到一个开源的Micro-Manager项目&#xff0c;它主要使用Java、C、Python等编程语言。对于LabVIEW开发者来…

【蓝桥杯嵌入式】2_LED

全部代码网盘自取 链接&#xff1a;https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码&#xff1a;3ii2 1、电路图 74HC573是八位锁存器&#xff0c;当控制端LE脚为高电平时&#xff0c;芯片“导通”&#xff0c;LE为低电平时芯片“截止”即将输出状态“锁存”…