当前位置: 首页 > news >正文

Vue3框架搭建2:axios+typescript封装

仓库地址:https://github.com/buguniao5213/LuArch

1、安装axios

npm install axios

2、创建文件

先创建一个文件夹:

├── src/
│   ├── api/        
│   │   ├── index.ts/   #编写axios封装代码    
│   │   └── example.ts/ #定义向后端服务器发送请求的模块`
├── publix/
│   ├── json/        
│   │   └── example.json/   #模拟get接口获取到的数据`

3、导入申明

导入axios库和相关类型

import axios, { type AxiosInstance, type AxiosRequestConfig } from 'axios';

4、基础url定义

这个后面放到vite的缓建变量配置中(.env)

const BASE_URL = '/'

5、定义request类

要素如下:

export class Request {private instance: AxiosInstance;private baseConfig: AxiosRequestConfig = { baseURL: BASE_URL, timeout: 60000 };public constructor() {//...    }public request() {//...    }public get() {//...    }//...//...
}

a)、private instance:私有属性instance:Axios实例

b)、private baseConfig:基本配置,包括基础URL和超时时间

c)、public constructor:构造函数

创建Axios实例,合并基本配置和传入配置

设置请求拦截器:可以添加token等认证信息

设置响应拦截器:处理相应数据,根据状态码决定返回数据或报错误信息

d)、请求方法设置:

request:通用请求方法。

get:GET请求方法。

post: POST 请求方法

put: PUT 请求方法

delete: DELETE 请求方法

完整代码如下:

index.ts:

export class Request {private instance: AxiosInstance;private baseConfig: AxiosRequestConfig = { baseURL: BASE_URL, timeout: 60000 };public constructor(config: AxiosRequestConfig) {this.instance = axios.create(Object.assign(this.baseConfig, config));this.instance.interceptors.request.use((config: any) => {// 配置处理逻辑// const token = 'tokentoken';return config;},(error: any) => {return Promise.reject(error);})this.instance.interceptors.response.use((res: any) => {if(res.data.code === 200) {return res.data.data;}else {// 错误code处理return "发生错误";}},(error: any) => {return Promise.reject(error);})}public request<T = any>(config: AxiosRequestConfig): Promise<T> {return this.instance.request(config);}public get<T = any>(url: string, params?: any, config?: AxiosRequestConfig): Promise<T> {return this.instance.get(url, {params, ...config});}public post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {return this.instance.post(url, data, config);}public put<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {return this.instance.put(url, data, config)}public delete<T = any>(url: string, params?: any, config?: AxiosRequestConfig): Promise<T> {return this.instance.delete(url, {params, ...config});}}

6、创建实例,并导出为Axios

export const Axios = new Request({baseURL: BASE_URL,
});

7、使用

a)、封装一个HTTP请求

example.ts:

import { Axios } from '@/api'export function HTLLOWORD() {return Axios.get<any>('/json/example.json')
}

example.json:

{   "code": 200,"data": "hello word"
}

b)、调用

import { HTLLOWORD } from '@/api/example'const getTest = () => {HTLLOWORD().then(res => {console.log(res)})
}getTest();

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C 语言调用 Python 代码
  • pycharm 创建python 初始化内容
  • Pytest简介及jenkins集成
  • 2024智慧竞技游戏俱乐部线下面临倒闭?
  • 五、python列表
  • 【python】PyQt5的窗口界面的各种交互逻辑实现,轻松掌控图形化界面程序
  • 华为OD 机试真题 - 分割均衡字符串(Python)
  • 认识sm1,sm2,sm3,sm4以及如何在Node.js实现
  • 如何解决隐藏游戏服务器的源IP问题
  • Windows 如何安装和卸载 OneDrive?具体方法总结
  • 基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例
  • 数仓工具—Hive语法之事务表更新Transactional Table Update
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(三)-机上无线电接入节点无人机
  • 南京邮电大学统计学课程实验2 用EXCEL进行参数估计假设检验 指导
  • camtasia怎么剪掉不用的部分 屏幕录制的视频怎么裁剪上下不要的部分 camtasia studio怎么裁剪视频时长 camtasia怎么剪辑视频教程
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • Android 控件背景颜色处理
  • Angular Elements 及其运作原理
  • css的样式优先级
  • es6
  • Mac转Windows的拯救指南
  • overflow: hidden IE7无效
  • Sublime text 3 3103 注册码
  • 闭包,sync使用细节
  • 服务器之间,相同帐号,实现免密钥登录
  • 利用DataURL技术在网页上显示图片
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 深度解析利用ES6进行Promise封装总结
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​TypeScript都不会用,也敢说会前端?
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • (java)关于Thread的挂起和恢复
  • (LLM) 很笨
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (回溯) LeetCode 46. 全排列
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (算法)前K大的和
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .aanva
  • .NET BackgroundWorker
  • .NET C# 配置 Options
  • .net 连接达梦数据库开发环境部署
  • /etc/fstab和/etc/mtab的区别
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • @Valid和@NotNull字段校验使用
  • @开发者,一文搞懂什么是 C# 计时器!
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [ABC294Ex] K-Coloring
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [APIO2015]巴厘岛的雕塑