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

从零开始搭建React+TypeScript+webpack开发环境-基于axios的Ajax请求工具

什么是axios

axios是一款基于Promise的HTTP客户端,适用于浏览器和Node.js环境。它的特点包括:

  1. 支持浏览器和Node.js环境。
  2. 支持Promise API。
  3. 支持拦截请求和响应。
  4. 支持取消请求。
  5. 自动转换JSON数据。
  6. 支持CSRF保护。

使用axios可以更方便地发送HTTP请求,并且对请求和响应进行拦截、转换等处理。它可以在浏览器端和Node.js环境中使用,很适用于进行数据交互。

安装axios

yarn add axios

创建token工具方法

// 定义访问令牌的常量键名
export const ACCESS_TOKEN = 'access_token';// 获取访问令牌
export const getAccessToken = () => {return localStorage.getItem(ACCESS_TOKEN);
};// 设置访问令牌
export const setAccessToken = (token: string) => {localStorage.setItem(ACCESS_TOKEN, token);
};// 移除访问令牌
export const removeAccessToken = () => {localStorage.removeItem(ACCESS_TOKEN);
};// 用于模拟刷新令牌的函数,可根据实际需求替换为真实刷新逻辑
export const refreshAccessToken = async () => {return Promise.resolve('123456'); // 返回新的令牌
};

request工具方法

当然,以下是一个更具体的分步骤介绍代码块的 Markdown 博文示例:

创建 Axios 实例

首先,我们需要创建一个 Axios 实例并配置默认请求头。这个实例将用于所有的网络请求。以下是创建 Axios 实例的示例代码:

import axios, { AxiosInstance, AxiosResponse, AxiosError } from 'axios';
import { API_HOST, LOGIN_URL } from './config';// 创建一个 Axios 实例并配置默认请求头
const instance: AxiosInstance = axios.create({baseURL: API_HOST, // 设置基本 URL
});

请求拦截器

请求拦截器用于修改请求配置,例如添加身份验证标头。以下是请求拦截器的示例代码:

instance.interceptors.request.use((config) => {let { url } = config;if (!url) {throw new Error('url不能为空');}if (url.indexOf('://') === -1) {url = `${API_HOST}${url}`;}const modifiedConfig = { ...config, url };if (!(modifiedConfig.data instanceof FormData)) {modifiedConfig.headers['Content-Type'] = 'application/json';}// 如果有访问令牌,将其添加到请求头const token = getAccessToken();if (token) {modifiedConfig.headers.Authorization = `JWT ${token}`;}return config;},async (error) => Promise.reject(error),
);

响应拦截器

响应拦截器用于处理响应,包括处理错误和刷新令牌。以下是响应拦截器的示例代码:

// 响应拦截器:用于处理响应
instance.interceptors.response.use((response: AxiosResponse) => {if (response.status === 204) {return response;}return response.data;},async (error: AxiosError) => {const { response } = error;if (response?.status === 401) {try {// 尝试无感刷新tokenconst newAccessToken = await refreshAccessToken();setAccessToken(newAccessToken);const originalRequest = error.config;if (originalRequest) {originalRequest.headers.Authorization = `JWT ${newAccessToken}`;// 重新发送原始请求return axios(originalRequest);}} catch (refreshError) {removeAccessToken();// 处理未授权 (401) 响应,重定向到登录页面const redirectUri = window.location.href;let secondsToLogin: number = 5;const modal = Modal.error({title: '凭证失效',content: `你的登录凭证已失效,${secondsToLogin}s后将跳转到登录页面`,});const timer = setInterval(() => {secondsToLogin -= 1;modal.update({content: `你的登录凭证已失效,${secondsToLogin}s后将跳转到登录页面`,okText: '立即登录',afterClose: () => {clearInterval(timer);window.location.href = `${LOGIN_URL}?${stringify({redirectUri,})}`;},});});setTimeout(() => {clearInterval(timer);modal.destroy();}, secondsToLogin * 1000);}}// 处理网络错误,显示通知notification.error({message: '网络错误,请联系管理员',});return Promise.reject(error);},
);

相关文章:

从零开始搭建React+TypeScript+webpack开发环境-基于axios的Ajax请求工具

什么是axios axios是一款基于Promise的HTTP客户端,适用于浏览器和Node.js环境。它的特点包括: 支持浏览器和Node.js环境。支持Promise API。支持拦截请求和响应。支持取消请求。自动转换JSON数据。支持CSRF保护。 使用axios可以更方便地发送HTTP请求&…...

【uniapp小程序下载】调用uni.uploadfile方法在调试工具里是没有问题的,但是线上版本和体验版就调用不成功,真机调试也没问题

把你的下载地址前缀添加到合法域名就解决了 在调试工具里成功了是因为勾选了下面这项 下面是我的下载并打开函数 methods: {// 下载downloadFileFn(data) {if (this.detailsObj.currentUserBuy) {uni.downloadFile({// data是路径url: https:// data,success(res) {//保存到本…...

chatGLM中GLM设计思路

GLM是结合了MLM和CLM的一种预训练方式,其中G为general;在GLM中,它不在以某个token为粒度,而是一个span(多个token),这些span之间使用自编码方式,而在span内部的token使用自回归的方式…...

卡牌游戏类型定制开发微信卡牌小程序游戏

卡牌类型的游戏开发具有一些独特的特点和挑战,以下是一些主要的特点: 卡牌设计和平衡:卡牌游戏的核心是卡牌设计和平衡。开发团队需要设计各种卡牌,确保它们在游戏中相互平衡,以便提供有趣的游戏体验。卡牌的特性、效…...

web —— css(1)

Web —— css基础 1. CSS样式表2. CSS的三种引入方式3. CSS 语法4. CSS 选择器4.1 元素选择器4.2 类选择器4.3 ID选择器4.4 属性选择器4.5 后代选择器4.6 子元素选择器4.7 伪类选择器4.8 分组选择器 5. 颜色和字体6. 显示方式display7. 盒子模型7.1 盒子模型 - 外边距塌陷7.2 盒…...

站群服务器的特性和好处是什么

站群服务器的特性和好处是什么 站群服务器的特性是什么?站群服务器是一种为一个网站或多个网站配置独立IP的服务器。因而相比一般的服务器,站群服务器最大的特性就是IP数量是非常的多。那么租用站群服务器使用有什么好处呢? 多网站优化 大…...

竞赛 行人重识别(person reid) - 机器视觉 深度学习 opencv python

文章目录 0 前言1 技术背景2 技术介绍3 重识别技术实现3.1 数据集3.2 Person REID3.2.1 算法原理3.2.2 算法流程图 4 实现效果5 部分代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习行人重识别(person reid)系统 该项目…...

软件设计模式的意义

软件设计模式的意义 所有开发人员都应该接触过软件设计模式这个概念,看过《设计模式-可复用的对象软件的基础》这本书,在面试中都被问过: 你用过哪些设计模式这种问题。但很大可能也就仅此而已了。 为什么好像只能从框架中找到设计模式的应用…...

vue基础知识十八:说说你对keep-alive的理解是什么?

一、Keep-alive 是什么 keep-alive是vue中的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM keep-alive 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们 keep-alive可以设置以下props属性&#xff1a…...

Linux CentOS配置阿里云yum源

一:先备份文件,在配置失败时可以恢复 cd /etc/yum.repos.d mkdir back mv *.repo back 二:下载阿里云yum源 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel…...

ESP32网络开发实例-Web服务器以仪表形式显示传感器计数

Web服务器以仪表形式显示传感器计数 文章目录 Web服务器以仪表形式显示传感器计数1、应用介绍2、软件准备3、硬件准备4、代码实现4.1 Web页面文件4.2 Web服务器代码实现在本文中,我们将介绍使用服务器发送事件 (SSE) 构建 ESP32 仪表 Web 服务器。服务器将自动向所有连接的网络…...

@Bean有哪些属性

直接看原文 原文链接:Spring中bean标签的作用和属性的详解-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- Bean的配置一般都在XML文件进行配置Bean相关包为:or…...

【Qt之绘制兔纸】

效果 代码 class drawRabbit: public QWidget { public:drawRabbit(QWidget *parent nullptr) : QWidget(parent) {}private:void paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);// 绘制兔子的耳朵painter.s…...

JS+CSS随机点名详细介绍复制可用(可自己添加人名)

想必大家也想拥有一个可以随机点名的网页&#xff0c;接下来我为大家介绍一下随机点名&#xff0c;可用于抽人&#xff0c;哈哈 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>* {margin: 0;…...

西瓜书笔记

周志华老师亲讲-西瓜书全网最详尽讲解-1080p高清原版《机器学习初步》 周志华机器学习&#xff08;西瓜书&#xff09;学习笔记&#xff08;持续更新&#xff09; 周志华《Machine Learning》学习笔记 绪论 基本术语 数据集&#xff08;data set&#xff09;&#xff1a;一堆…...

学算法常用刷题网站

学算法常用刷题网站 AcWing : 北大报送生&#xff0c;NOI金牌得主—yxc创办 CodeForces: 简称CF&#xff0c;俄罗斯的网站 hduoj: 杭州电子科技大学的在线评测系统 vjudge&#xff1a;用户可以自己举办比赛 POJ: 北京大学的在线评测系统 洛谷&#xff1a;很火的刷题网站 计蒜客…...

hdlbits系列verilog解答(always块条件语句)-37

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 Verilog 有一个三元条件运算符 ( ? : ) 很像 C语言: (condition ? if_true : if_false) 这可用于根据一行上的条件(多路复用器!)选择两个值之一,而无需在组合 always 块中使用 if-then。 举例: (0…...

智能井盖生产商家,万宾科技井盖传感器产品详情

市政府管理水平决定城市人民幸福程度&#xff0c;所以在智慧城市推进过程中&#xff0c;市政府也在加快城市信息基础设施建设&#xff0c;希望提高公共服务水平&#xff0c;以此来满足城市居民的需求&#xff0c;进一步推进城市信息化智能化发展。作为城市生命线的一个组成部分…...

开启AWS的ubuntu服务器的root用户登录权限

设置root用户密码 输入以下命令修改root用户密码 sudo passwd root输入以下命令切换到root用户 su root仅允许root用户用密码登录 输入以下命令编辑ssh配置文件 vi /etc/ssh/sshd_config新增以下配置允许root用户登录 PermitRootLogin yes把PasswordAuthentication修改为…...

ES6模块介绍—module的语法import、export简单介绍及用法

ES6模块语法 模块功能主要由两个命令构成&#xff1a;export和import。export命令用于规定模块的对外接口&#xff0c;import命令用于输入其他模块提供的功能。 一个模块就是一个独立的文件。该文件内部的所有变量&#xff0c;外部无法获取。如果你希望外部能够读取模块内部的…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...