axios和ts的简单使用

按照官网的使用案例简单记下笔记

1:安装

npm install axios

2:案例

一个简单的config配置信息

// 发起一个post请求
axios({method: 'post',url: '/user/12345',data: {firstName: 'Fred',lastName: 'Flintstone'}
});

case 

// 在 node.js 用GET请求获取远程图片
axios({method: 'get',url: 'http://bit.ly/2mTM3nY',responseType: 'stream'
}).then(function (response) {response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))});

上面都是官网的案例

在实际的项目中,在使用axios请求时,都会进行数据封装。

3:创建实例

封装一些耦合度高的请求配置

config.ts文件

封装一个基础的请求头配置,使用axios中内置的ts类型 AxiosRequestConfig属性限制

import { API_BASE_URL } from '@/utils/env'
import { AxiosRequestConfig } from 'axios'const baseURL = API_BASE_URLconst axiosConfig: AxiosRequestConfig = {baseURL,// 请求超时时间timeout: 30 * 1000,// 跨域是否带tokenwithCredentials: true,showMessageOnReject: true,
}
export default axiosConfig

创建实例

import config from './config'
const axiosInstance = axios.create(config)

4:发起请求前的处理

axiosInstance.interceptors.request.use((config) => {const token = getToken()if (token) {;(config.headers as AxiosRequestHeaders).Authorization = `Bearer ${token}`;(config.headers as AxiosRequestHeaders)['X-ECAPI-UserAgent'] = getUserAgent()}return config},(error) => {return Promise.reject(error)}
)

在发起请求前,添加headers,配置身份信息

在请求头部添加UserAgent:X-ECAPI-UserAgent

在使用Akamai的API时,通常需要设置X-ECAPI-UserAgent头部来标识API的调用者。这样做可以帮助Akamai识别是谁在调用API,并可能用于日志记录或者访问控制。

 5:接口返回值

// @TODO: 两处reject的reason做个包装,通过一个标识符,使得业务代码可以区分走的是哪个reject
axiosInstance.interceptors.response.use((res: AxiosResponse<BaseResponse>) => {console.log('router', router)console.log('location.href', location.href)if (res.data.code !== ResponseCode.Success) {// 2. HTTP状态码200,但业务code !== ResponseCode.Success, promise 会被 rejectif (res.data.code === ResponseCode.InvalidToken) {// 业务代码} else if (res.data.code === ResponseCode.appDisabled) {// 业务代码router.push('/404')} else {// 业务代码}return Promise.reject(res)}// 1. 当且仅当业务code === ResponseCode.Success的情况下, promise 才会被 resolvereturn res},(error: AxiosError) => {// 3. HTTP状态码非200 || 网络异常 || 其它未被捕获的错误, promise会被 rejectif (error.config && error.config.showMessageOnReject) {if (error.response?.status === 500) {Toast('服务异常,请稍后重试')} else {Toast('网络异常,请稍后重试')}}return Promise.reject(error)}
)

这里的ResponseCodeBaseResponse是项目自定义的类型限制,不是axios中内置的;

6:AbortController的简单介绍

这里有一个中止请求的方法,使用AbortController,在网上看到别人说的使用方法:

认识 AbortController控制器对象 及其应用-CSDN博客

案例

type EnhancedPromise<T> = Promise<T> & {abortController: AbortController
}export const get = (url: string, params: Recordable = {}, config?: AxiosRequestConfig) => {const controller = new AbortController()const promise = new Promise((resolve, reject) => {axiosInstance.get<BaseResponse, AxiosResponse<BaseResponse, Recordable>, Recordable>(url, {params,signal: controller.signal,...config,}).then((res) => {resolve(res)}).catch((err: AxiosError) => {reject(err)})}) as EnhancedPromise<AxiosResponse<BaseResponse, Recordable>>promise.abortController = controllerreturn promise
}export const post = (url: string, data: Recordable = {}, config?: AxiosRequestConfig) => {const controller = new AbortController()const promise = new Promise((resolve, reject) => {axiosInstance.post<BaseResponse, AxiosResponse<BaseResponse, Recordable>, Recordable>(url, data, {signal: controller.signal,...config,}).then((res) => {resolve(res)}).catch((err: AxiosError) => {reject(err)})}) as EnhancedPromise<AxiosResponse<BaseResponse, Recordable>>promise.abortController = controllerreturn promise
}

覆盖axios原有的post和get方法

7:使用

7.1 没有覆盖post和get方法的使用方式

使用axios原有的post和get方式发起请求

import request from '@/request'// 查询export const findCategoryTree = ({ categoryId = 0 }: Recordable) => {return request.post(`/manager`, { categoryId })}

7.2覆盖了post和get方法的使用方式 

import { get, post } from '@/http'
import { AxiosRequestConfig } from 'axios'// 短信验证码登录
export const signin = (data: Recordable, config?: AxiosRequestConfig) => {return post(`/member/login`, data, config)
}

8:typescript的介绍

axios提供的内置类型声明,查看路径node_modules/axios/index.d.ts

import axios, { AxiosRequestConfig, AxiosResponse, AxiosError, AxiosRequestHeaders } from 'axios'
  • AxiosResponse:接口响应值类型限制
  • AxiosError:接口响应失败情况下的类型限制处理

  • AxiosRequestHeaders 接口请求头类型限制

  • AxiosRequestConfig 接口请求的基本配置类型限制

简单记录下vue3 + axios + ts 的基本封装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

总结常见漏洞的代码审计方法

前言 这篇文章主要是总结一下在安全工作中常见漏洞的代码审计方法&#xff0c;以及修复方案&#xff0c;希望能对初学代码审计小伙伴们有所帮助&#xff0c;笔芯♥️ 代码审计的思路 通常做代码审计都是检查敏感函数的参数&#xff0c;然后回溯变量&#xff0c;判断变量是否可…

【Crypto】RSA

文章目录 题目步骤1.计算 &#x1d45b;2.计算欧拉函数 &#x1d719;(&#x1d45b;)3. 扩展欧几里得算法求逆元 &#x1d451; 解题感悟 题目 p473398607161 q4511491 e17 求d 步骤 1.计算 &#x1d45b; 公式&#xff1a;npq n47339860716145114912135733555619387051 …

初识STM32单片机-TIM定时器

初识STM32单片机-TIM定时器 一、定时器概述二、定时器类型2.1 基本定时器(TIM6和TIM7)2.2 通用定时器(TIM2、TIM3、TIM4和TIM5)2.3 高级定时器(TIM1和TIM8) 三、定时中断基本结构和时基单元工作时序3.1 定时器基本结构3.2 预分频器时序3.3 计数器时序3.3.1 计数器有无预装时序(…

Hono 框架使用经验谈

Hono&#x1f525;是一个小型、快速并开源的 Serverless Web 框架&#xff0c;用 TypeScript 写就。它适用于任何JavaScript运行时&#xff1a;Cloudflare Workers&#xff0c;Fastly ComputeEdge&#xff0c;Deno&#xff0c;Bun&#xff0c;Vercel&#xff0c;Netlify&#x…

动手学操作系统(一、搭建实验环境)

动手学操作系统&#xff08;一、搭建实验环境&#xff09; 文章目录 动手学操作系统&#xff08;一、搭建实验环境&#xff09;1. 在VMware虚拟机中安装ubuntu20.042. 安装Bochs3. 启动计算机Reference &#x1f680; 环境配置 &#x1f680; 笔者的环境使用的是 ubuntu 20.04…

python多线程的使用

Python 多线程探索 在 Python 编程中&#xff0c;多线程是一项强大的技术&#xff0c;它允许我们同时执行多个任务&#xff0c;从而提高程序的效率和响应性。 一、线程的基本概念 线程是进程中的一个执行单元&#xff0c;可以与其他线程共享进程的资源。 二、创建线程 在 P…

Linux:confluence8.5.9的部署(下载+安装+破ji)离线部署全流程

0.环境 Confluence也是比较吃运存了&#xff0c;我建议运行运存给到4g或者4g以上就可以了&#xff0c;核数可以给到1核或以上 我部署在centos7.9操作系统上&#xff0c;ip地址为&#xff1a;192.168.6.1&#xff0c;yum仓库使用的是自己的镜像文件&#xff0c;本章所有使用到…

爱普生XC1011SD为电气稳定控制系统组合式传感器推出解决方案

在现代电力系统中&#xff0c;确保系统的安全和稳定运行至关重要。为了应对这一需求&#xff0c;我们推出了XC1011SD组合式传感器解决方案&#xff0c;它专为电气稳定控制系统设计&#xff0c;提供了卓越的性能和可靠性。 XC1011SD是一款集成陀螺仪传感器和双轴加速度计于一体的…

炸裂!AI五分钟模仿爆款IP故事,涨粉速度太绝了!

‍ ‍大家好&#xff0c;我是向阳。 今天我要分享一个利用AI技术模仿爆款账号的小技巧&#xff0c;帮助大家迅速增加粉丝。这个方法简单实用&#xff0c;尤其适用于副业和本地生活领域。接下来&#xff0c;我将为大家详细讲解操作步骤。让我们开始吧。 副业赚钱&#xff1a;模…

合约构成-成员变量、函数、事件event、修饰器modifier及构造函数

合约的基本结构 合约中的成员变量合约中的成员函数Event&#xff08;事件&#xff09;、modifier(修饰器)与constructor&#xff08;构造函数:实例产生的时候执行&#xff09; Event事件 modifier construcor 1、成员变量 概念&#xff1a;存储合约状态的变量 声明方法&a…

北京证券公司港股通交易佣金手续费最低是多少?万0.8?港股通纳入规则是怎么样的?

港股通交易佣金概述 港股通的交易佣金可能会因证券公司和投资者的不同而有所差异。 北京证券公司的港股通交易佣金最低可能万分之零点八&#xff08;0.008%&#xff09;&#xff0c;但这需要投资者与证券公司客户经理了解&#xff0c;进行沟通和申请。 一般来说&#xff0c;…

CSS学习笔记:Less

什么是Less&#xff1f; Less是一个CSS预处理器&#xff0c; Less文件后缀是.less 扩充了CSS 语言&#xff0c;使CSS具备一定的逻辑性、计算能力 可以通俗地理解&#xff1a;Less是一种更好用的CSS 注释 运算 嵌套 Less嵌套的作用&#xff1a;快速生成后代选择器 变量 问…

软考中级-软件设计师-真题详解【2023年上半年】

2023上半年真题记忆点详解 本片不涉及解题法&#xff0c;只整理记忆背诵点&#xff0c;记住即可拿分。 上午题部分&#xff1a; 片内总线&#xff1a;用于芯片内部各主要部件连接&#xff1b; 系统总线&#xff1a;用于CPU、主存、外设见的数据传输&#xff1b; 通讯总线&…

04 FreeRTOS 队列(queue)

1、队列的特性 队列可以理解为一个传送带&#xff0c;一个流水线。 队列可以包含若干个数据&#xff1a;队列中有若干项&#xff0c;这被称为"长度"(length) 每个数据大小固定 创建队列时就要指定长度、数据大小 数据的操作采用先进先出的方法(FIFO&#xff0c;First…

干货分享 —— 如何开展web项目自动化测试!

前言 自动化(Automation)是指机器设备、系统或过程(生产、管理过程)在没有人或较少人直接参与的情况下&#xff0c;根据人的要求&#xff0c;通过自动检测、信息处理、分析判断、操纵和控制&#xff0c;达到预期目标的过程。自动化测试是指测试过程是在没有人为或较少人为干预…

从零构建vue3+ts+vite项目打包及项目依赖配置

❗️❗️❗️❗️ 写在最前: 本文是根据B站作者 月光分层 视频vuets 工程化配置以及作者笔记稍作整理 &#x1f496;&#x1f496;作者B站地址https://space.bilibili.com/14110850 &#x1f496;&#x1f496;视频教程地址vuets 工程化配置 &#x1f496;&#x1f496;作者微信…

【计算机毕业设计】安卓054基于Android校园助手

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

LAMP源码编译安装——CentOS7

文章目录 LAMP是什么LAMP软件组件LinuxApacheMySQLPHP 源码安装Apache一、准备工作二、安装环境依赖包三、配置软件模块四、编译及安装五、优化配置文件路径六、添加httpd系统服务&#xff08;有两种方法&#xff09;方法一&#xff1a;方法二&#xff1a; 七、修改httpd 服务配…

公告:关于博主的重要通知

大家好&#xff0c;我是博主夏目。 本期不分享知识&#xff0c;博主想说明一下博主的一些重要提示。 分享的内容&#xff0c;从不收费&#xff0c;也未向任何人进行收费。 意在分享知识&#xff0c;传播文化&#xff0c;结交更多志同道合的朋友。 截至目前&#xff0c;从未…

《C++ Primer Plus》第十二章复习题和编程练习

目录 一、复习题二、编程练习 一、复习题 1. 假设String类有如下私有成员&#xff1a; // String 类声明 class String { private: char* str;int len;// ... };a. 下述默认构造函数有什么问题&#xff1f; String::String() { } // 默认构造函数b. 下述构造函数有什么问题…