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

Ant Design Pro 封装网络请求

可以直接在antdPro项目的app.tsx文件中对request进行运行时配置,并且该配置会直接透传到umi-request的全局配置。后续直接从umi中引入request或者useRequest直接使用,可以说是非常方便。文档可查看:umi.js

具体配置代码:

import { history, Link, RequestConfig } from 'umi';
/**** 对request进行运行时配置,并且该配置会直接透传到umi-request的全局配置。* 后续直接从umi中引入request或者useRequest直接使用,可以说是非常方便。*/
/** 请求拦截 */
const requestInterceptor = (url: any, options: any): any => {const headers = {...options.headers,//此处需要修改一下逻辑判断Authorization: localStorage.getItem('token') || '1213',};return {url: url,options: { ...options, headers: headers },};
};
/** 响应拦截 */
const responseInterceptors = (response: any, options: any): any => {if (response.status !== 200) {switch (response.status) {case 401:history.push('/login');break;}}return response;
};
/** 异常处理程序 */
const codeMessage = {200: '服务器成功返回请求的数据。',201: '新建或修改数据成功。',202: '一个请求已经进入后台排队(异步任务)。',204: '删除数据成功。',400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',401: '用户没有权限(令牌、用户名、密码错误)。',403: '用户得到授权,但是访问是被禁止的。',404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',406: '请求的格式不可得。',410: '请求的资源被永久删除,且不会再得到的。',422: '当创建一个对象时,发生一个验证错误。',500: '服务器发生错误,请检查服务器。',502: '网关错误。',503: '服务不可用,服务器暂时过载或维护。',504: '网关超时。',
};
const errorHandler = (error: any) => {const { response } = error;if (response && response.status) {const errorText = codeMessage[response.status] || response.statusText;const { status, url } = response;throw new Error(`请求错误 ${status}: ${url}${errorText}`);} else if (!response) {throw new Error('您的网络发生异常,无法连接服务器');}return response;
};// request运行时配置
export const request: RequestConfig = {timeout: 30000, //请求超时时间// prefix: process.env.NODE_ENV === "production" ? config.baseurl :'api/', // 统一的请求前缀// 自定义端口规范(可以对后端返回的数据格式按照我们的需求进行处理)errorConfig: {adaptor: (resData) => {debugger;return {...resData,};},},middlewares: [],errorHandler: (error) => {errorHandler(error);}, //请求错误处理requestInterceptors: [requestInterceptor], //请求拦截responseInterceptors: [responseInterceptors], //响应拦截
};
/**------------------------------------------------------------------配置结束请求拦截------------------------------------------ */

 

这段代码是一个请求配置对象 `request`,其中包含了请求拦截、响应拦截和异常处理的相关逻辑。这些逻辑会在发起请求和接收响应时进行处理。

首先,定义了一个 `requestInterceptor` 函数用于请求拦截。该函数会将存储在本地存储中的令牌添加到请求头的 `token` 字段中,并将修改后的请求头放入 `options` 中返回。

接下来,定义了一个 `responseInterceptors` 函数用于响应拦截。该函数会在响应状态码不为 200 时进行处理。其中,当响应状态码为 401 时,会导航到登录页面并弹出提示信息。

然后,定义了一个异常处理程序 `errorHandler`。该程序会根据响应状态码来判断异常类型,并抛出相应的错误信息。

接下来,定义了一个 `codeMessage` 对象,它存储了一些常见的响应状态码和对应的错误消息。

最后,定义了一个 `request` 对象,包含了一些运行时配置。其中包括了请求超时时间、错误处理函数、请求拦截器和响应拦截器等。

需要注意的是,这段代码可能还需要引入一些外部依赖,比如 `localStorage` 和 `history`。你需要根据你的实际环境和需求进行适配和修改。

总之,这段代码封装了请求拦截、响应拦截和异常处理的逻辑,将它们作为配置项进行统一管理。

 后续使用直接从umi中引入request 或者 useRequest,配置即生效

//后续使用直接从umi中引入request 或者 useRequest,配置即生效import { request } from 'umi';export function login(body: API.LoginParams, options?: Record<string, any>) {return request<API.LoginResult>('/devServer/users/login', {method: 'POST',headers: {'Content-Type': 'application/json',},data: body,...(options || {}),});
}

 

这段代码是一个登录请求的示例代码。它使用了之前定义的 `request` 对象来发送登录请求。

在 `login` 函数中,通过 `request` 对象发送了一个 POST 请求到 `/devServer/users/login` 接口。请求的主体内容是 `body` 参数,请求头中设置了 `Content-Type` 为 `application/json`。`options` 参数可以传入额外的请求配置,如超时时间等。

`request` 函数返回一个 Promise 对象,该 Promise 对象的泛型参数指定了响应数据的类型为 `API.LoginResult`。

使用这段代码时,你需要根据实际情况修改请求的接口地址和请求体的类型。

总之,这段代码使用了之前定义的 `request` 对象来发送登录请求,并返回一个 Promise 对象,以便后续处理响应数据。

相关文章:

Ant Design Pro 封装网络请求

可以直接在antdPro项目的app.tsx文件中对request进行运行时配置&#xff0c;并且该配置会直接透传到umi-request的全局配置。后续直接从umi中引入request或者useRequest直接使用&#xff0c;可以说是非常方便。文档可查看&#xff1a;umi.js 具体配置代码&#xff1a; import…...

命令模式——请求发送者与接收者解耦

1、简介 1.1、概述 在软件开发中&#xff0c;经常需要向某些对象发送请求&#xff08;调用其中的某个或某些方法&#xff09;&#xff0c;但是并不知道请求的接收者是谁&#xff0c;也不知道被请求的操作是哪个。此时&#xff0c;特别希望能够以一种松耦合的方式来设计软件&a…...

css 利用模糊属性 制作水滴

<style>.box {background-color: #111;height: 100vh;display: flex;justify-content: center;align-items: center;/* 对比度*/filter: contrast(20);}.drop {width: 150px;height: 159px;border-radius: 50%;background-color: #fff;position: absolute;/* 模糊 */filt…...

怎么才能提升自己工作能力?

表现最好的员工通常是获得加薪和工作晋升的人。您可以采取某些措施来提高您的工作绩效&#xff0c;并帮助您的主管将您视为他们最好的员工之一。在本文中&#xff0c;我们列出了 12 个技巧&#xff0c;可以立即提高您的工作绩效。 什么是工作绩效&#xff1f; 工作绩效是指您…...

Android Framework 之 Zygote

Android Zygote Android Zygote 是 Android 操作系统中一个关键的系统服务&#xff0c;它在系统启动时加载&#xff0c;为应用程序的运行提供了一种快速且资源高效的方式。 Zygote 的主要作用如下&#xff1a; 预加载共享库和类&#xff1a;Zygote 启动时&#xff0c;会预先加…...

二叉树的中序遍历 LeetCode热题100

题目 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 思路 递归&#xff0c;按左中右的顺序添加节点。 利用栈先进后出的特性模拟递归。 代码 /**递归写法* Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left…...

IOS + Appium自动化教程

前言 项目闲置下来了&#xff0c;终于抽空有时间搞自动化了&#xff0c;看了下网上的教程基本通篇都是android自动化的介绍 &#xff0c;ios自动化方面的内容网上简介的少之可怜。由于本人对ios自动化也是第一次做&#xff0c;甚至对苹果电脑的使用都不太熟悉&#xff0c;花了大…...

100个精选Python实战项目案例,在线无偿分享

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 随着 Python 语言的流行&#xff0c;越来越多的人加入到了 Python 的大家庭中。 为什么这么多人学 Python &#xff1f; 我要喊出那句话了&#xff1a;“人生苦短&#xff0c;我用 Python&#xff01;”&#xff0c; 正是…...

JSON语法

目录 一、JSON 语法规则 二、JSON 的两种结构&#xff1a; 三、JSON 名称/值对 JSON 值 JSON 数字 JSON 对象 JSON 数组 JSON 布尔值 JSON null 四、JSON 使用 JavaScript 语法 JSON 语法是 JavaScript 语法的子集。 一、JSON 语法规则 JSON 语法是 JavaScript 对象…...

PostMan+Jmeter+QTP工具介绍及安装

目录 一、PostMan介绍​编辑 二、下载安装 三、Postman与Jmeter的区别 一、开发语言区别&#xff1a; 二、使用范围区别&#xff1a; 三、使用区别&#xff1a; 四、Jmeter安装 附一个详细的Jmeter按照新手使用教程&#xff0c;感谢作者&#xff0c;亲测有效。 五、Jme…...

2023电赛E题视觉部分

该部分主要要完成正方形区域的识别&#xff0c;并返回对应的坐标&#xff0c;但是由于距离1m&#xff0c;过远。因此需要引入图像增强&#xff0c;下面代码完成基本流程测试&#xff0c;仅供参考&#xff1a; import sensor import image import time # 初始化摄像头 senso…...

算法工程师岗位面试必备,讲透深度学习面试题,详解人工智能生成式任务与AI大模型面试题

DeepLearning-Interview-Awesome-2024 算法工程师岗位面试必备&#xff0c;讲透深度学习面试题&#xff0c;详解人工智能生成式任务与AI大模型面试题 实时更新题解链接&#xff1a;https://github.com/315386775/DeepLearing-Interview-Awesome-2024 记得点个关注&#xff0…...

JVM基础篇-虚拟机栈

JVM基础篇-虚拟机栈 定义 Java Virtual Machine Stacks &#xff08;Java 虚拟机栈&#xff09; 每个线程运行时所需要的内存&#xff0c;称为虚拟机栈每个栈由多个栈帧&#xff08;Frame&#xff09;组成&#xff0c;对应着每次方法调用时所占用的内存每个线程只能有一个活动…...

KepwareEX配置API REST接口

服务端Kepware设置 API允许连接设置 创建通道 请求地址(POST)&#xff1a; https://<主机名_或_ip>:<端口>/config/v1/project/channels 以下示例使用postman工具访问API创建了一个名为Channel1 的通道&#xff0c;其使用在本地主机运行的服务器中的Simulator …...

【python】python求解矩阵的转置(详细讲解)

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…...

Mr. Cappuccino的第56杯咖啡——Mybatis拦截器

Mybatis拦截器 概述应用场景项目结构实现分页查询其它拦截器的使用 概述 Mybatis允许使用者在映射语句执行过程中的某一些指定的节点进行拦截调用&#xff0c;通过织入拦截器&#xff0c;在不同节点修改一些执行过程中的关键属性&#xff0c;从而影响SQL的生成、执行和返回结果…...

容器化安装环境EFK搭建

容器化安装环境 Docker中安装并启动ElasticSearch 前置配置 第一步&#xff1a;在宿主机上执行echo “net.ipv4.ip_forward1” >>/usr/lib/sysctl.d/00-system.conf 2.第二步&#xff1a;重启network和docker服务 [rootlocalhost /]# systemctl restart network &&…...

基于 Debian GNU/Linux 12 “书虫 “的Neptune 8.0 “Juna “来了

导读Neptune Linux 发行版背后的团队发布了 Neptune 8.0&#xff0c;作为这个基于 Debian 的 GNU/Linux 发行版的重大更新&#xff0c;它围绕最新的 KDE Plasma 桌面环境构建。 Neptune 8.0 被命名为 “Juna”&#xff0c;是在Neptune 7.5 发布 11 个月后发布的&#xff0c;也是…...

GDAL C++ API 学习之路 (4) Spatial Reference System篇 OGRSpatialReference类

class OGRSpatialReference #include <ogr_spatialref.h> OGRSpatialReference 是 GDAL/OGR 库中的一个重要类&#xff0c;用于管理和操作地理空间数据的空间参考系统&#xff08;Spatial Reference System&#xff0c;SRS&#xff09;。它提供了一系列功能&…...

RS232转Profinet网关rs232转网口需要如何设置

大家好&#xff0c;今天我要给大家带来一个很有意思的案例分享。你们猜猜&#xff0c;这回我们要用捷米的一款神奇的网关JM-RS485/232-PN做什么呢&#xff1f;没错&#xff0c;我们要把一台扫码枪设备通过这个RS232转PROFINET网关&#xff0c;接入到一台西门子S7-1200PLC的Prof…...

别让SDF警告淹没你!芯片后仿真中那些‘不起眼’却至关重要的VCS编译选项详解

别让SDF警告淹没你&#xff01;芯片后仿真中那些‘不起眼’却至关重要的VCS编译选项详解 当数字IC设计进入后仿真阶段&#xff0c;工程师们常常会陷入海量警告信息的泥潭。特别是当SDF&#xff08;Standard Delay Format&#xff09;文件反标时产生的各类警告&#xff0c;往往…...

KEIL MDK实战:3分钟将常用C文件封装成LIB库(附标准库管理技巧)

KEIL MDK高效工程管理&#xff1a;C文件封装LIB库的进阶实践 在嵌入式开发领域&#xff0c;随着项目规模扩大&#xff0c;工程文件管理往往成为影响开发效率的关键瓶颈。特别是对于STM32开发者而言&#xff0c;标准外设库、常用算法模块等重复使用的代码如何高效管理&#xff0…...

AutoGLM沉思版 vs OpenAI DeepResearch:免费国产AI Agent能否替代200美元/月的服务?

AutoGLM沉思版与OpenAI DeepResearch深度对比&#xff1a;企业级AI研究工具如何选择&#xff1f; 当企业研发团队需要处理海量文献综述时&#xff0c;当投资机构需要快速生成行业分析报告时&#xff0c;技术决策者往往面临一个关键选择&#xff1a;是选择国际知名但价格高昂的O…...

Graphormer在药物发现中的价值:缩短先导化合物筛选周期50%以上

Graphormer在药物发现中的价值&#xff1a;缩短先导化合物筛选周期50%以上 1. 引言&#xff1a;药物研发的新利器 在药物研发领域&#xff0c;科学家们每年需要筛选数百万种化合物来寻找潜在的药物候选分子。传统方法不仅耗时耗力&#xff0c;而且成本高昂。Graphormer的出现…...

颠覆体验:Mac鼠标滚动优化完全指南——从卡顿到丝滑的蜕变之路

颠覆体验&#xff1a;Mac鼠标滚动优化完全指南——从卡顿到丝滑的蜕变之路 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction indepen…...

Three.js面试必备:从光源类型到性能优化的20个高频考点解析

Three.js面试深度攻略&#xff1a;从核心原理到性能优化的20个技术要点 当面试官抛出"Three.js的光照系统如何影响渲染性能"这类问题时&#xff0c;你是否能条理清晰地拆解环境光与平行光的计算差异&#xff1f;面对"如何实现自定义着色器优化建筑可视化项目的渲…...

构建企业级AI客服系统:从知识库集成到无缝转人工的实战指南

1. 企业级AI客服系统架构设计 第一次搭建AI客服系统时&#xff0c;我犯了个典型错误——直接调用大模型API就开始开发前端界面。结果上线后才发现&#xff0c;当用户量超过50人时响应速度直线下降&#xff0c;转人工功能更是形同虚设。这个教训让我明白&#xff0c;企业级系统必…...

OpenClaw龙虾推出官方中国镜像站,由字节跳动提供支持

文章目录前言龙虾是谁&#xff1f;为啥它搞个镜像站这么重要&#xff1f;中国镜像站来了&#xff1a;地址是 mirror-cn.clawhub.com背后的故事&#xff1a;腾讯、字节、龙虾的"三国演义"镜像站的意义&#xff1a;不只是个"加速器"怎么用&#xff1f;手把手…...

JavaSE从0到1-DAY7-内部类(i)

Java 内部类学习笔记&#xff08;i&#xff09; 一、为什么会有内部类&#xff1f; 核心作用 内部类是写在外部类里面的类&#xff0c;它的主要作用是&#xff1a; 逻辑封装&#xff1a;把只属于外部类的辅助功能封装起来&#xff0c;不暴露给外界访问权限&#xff1a;内部类可…...

一文吃透Redis集群:架构、原理、搭建与实战优化

在分布式系统中&#xff0c;Redis作为高性能的键值存储中间件&#xff0c;单机部署早已无法满足高并发、大容量的业务需求——当数据量突破单机内存上限、QPS达到万级以上&#xff0c;单机Redis的单点故障、性能瓶颈会直接影响业务稳定性。此时&#xff0c;Redis集群&#xff0…...