HOW - 如何封装一个规范的请求

封装一个规范的请求通常涉及到以下几个方面:

  1. 请求方法(GET、POST 等)
  2. 请求参数构造(根据使用的请求库,包括不同 Method 要求的 params 格式、空值处理等)
  3. 格式转换(如请求体和返回体参数的下划线格式和驼峰格式转换,一般前端会用驼峰命名格式,后台会用下划线命名格式)
  4. 请求头构造(根据不同请求类型,比如 json、form、multipart)
  5. 返回体处理(包括成功和错误处理等)

下面是一个具体的实现:

src/app.ts

import { viewClient } from 'src/request/index';
const info = await viewClient.getUserInfo();
console.log(info);

src/request/index.ts

import UserClient from './UserClient';
export const viewClient = new ViewClient();

src/request/UserClient.ts

class UserClient extends ClientBase {constructor() {super('/center-api');}getUserInfo(params) {return this.get('/v1/user/getUserInfo', params);}updateUserInfo(params) {return this.post('/v1/user/updateUserInfo', params);}uploadData(params) {return this.post('/v1/user/uploadData', params, {dataType: 'multipart'})}downloadData(params) {return this.get('/v1/user/downloadData', params, {responseType: 'blob'})}
}
export default UserClient;

src/request/ClientBase.ts

import axios from 'axios';
import humps from 'humps';
import qs from 'qs';
import isPlainObject from 'lodash/isPlainObject';
import { ElMessage } from 'element-plus';interface IOption {underscoreRequestData: boolean; // 是否将入参对象的键从驼峰式命名转换为下划线分隔的形式camelizeResponseData: boolean; // 是否将返回体对象的键从下划线分割命名转换为驼峰式的形式removeEmptyValue: boolean; // 是否删除空入参removeEmptyValueTypeList: unknown[]; // value 值等于什么时被视为空入参 例如 [null, undefined, NaN, '']dataType: string; // request Content-TyperesponseType: string; // response Content-Type
}
type PartialIOption = Partial<IOption>;
type IOptionDefault = Pick<PartialIOption,'underscoreRequestData' | 'camelizeResponseData' | 'dataType'
>;
const DEFAULT_OPTIONS: IOptionDefault = {underscoreRequestData: true,camelizeResponseData: true,dataType: 'json',
};
export class ClientBase {// 不同实体 API 请求的前缀,如 UserClient 为 /center-apiapiUrlPrefix: string;// 请求的配置项options: PartialIOption;// 是否登录中isLogging: boolean;/*** constructor* @param apiURLPrefix* @param options*/constructor(apiUrlPrefix = '', options = {}) {this.apiUrlPrefix = apiUrlPrefix;this.options = {...DEFAULT_OPTIONS,...options,};this.isLogging = false;}/*** get, post, put, delete* @param url 请求api* @param data 入参* @param options 特定请求额外配置项* @returns*/get(url: string, data?: any, options?: any) {return this._request(url, 'get', data, options);}post(url: string, data?: any, options?: any

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

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

相关文章

物联网平台之单体架构

介绍本文主要介绍平台的单体架构&#xff0c;包括各个组件之间的数据流描述以及所做的一些架构选择。在单体架构模式下&#xff0c;所有 ThingsKit 组件都在单个 Java 虚拟机 (JVM) 中启动&#xff0c;并共享相同的操作系统资源。由于 ThingsKit 是用 Java 编写的&#xff0c;因…

蓝队面试题(二)

应急响应基本思路和流程 收集信息:收集客户信息和中毒主机信息,包括样本 判断类型:判断是否是安全事件,何种安全事件,勒索、挖矿、断网、DoS 等等 抑制范围:隔离使受害⾯不继续扩⼤ 深入分析:日志分析、进程分析、启动项分析、样本分析方便后期溯源 清理处置:杀掉…

在Windows环境下的rknn-toolkit环境搭建

在Windows环境下的rknn-toolkit环境搭建 最近需要使用RK3566来跑YOLOv5。想要实现目标就需要使用rknn-toolkit工具将模型转化成可以运行在rk3588的NPU上的模型。只是转换模型的话&#xff0c;没有必要使用GPU&#xff0c;所以我这里安装的是CPU版的&#xff0c;所需的组件按照…

dnf手游攻略,新手入坑必备!

一、角色创建策略 在DNF手游中&#xff0c;角色创建是玩家初入游戏的首要步骤。为最大化游戏体验和收益&#xff0c;新手玩家通常建议创建三个角色&#xff1a;一个主账号和两个副账号。 主账号选择 主账号的选择应基于玩家个人的喜好和对职业的熟悉程度。无论选择哪个职业&a…

番外篇 | 手把手教你利用YOLOv8进行热力图可视化 | 针对视频

前言:Hello大家好,我是小哥谈。YOLOv8的热力图可视化可以帮助我们更加直观地了解模型在图像中的检测情况,同时也可以帮助我们进行模型的调试和优化。热力图是一种颜色渐变的图像,不同颜色的区域表示不同程度的关注度或者置信度。在YOLOv8中,可以通过设置阈值来控制热力图的…

电机控制杂谈——“双采样双更新模式”对模型预测控制/PI控制的提升有多大?

1.采样频率与PWM开关频率的关系 一般有以下两种采样模式。 如下图&#xff08;a&#xff09;所示&#xff0c;这种方式称之为单采单更模式&#xff0c;即在一个PWM周期内&#xff0c;采样一次&#xff0c;更新一次PWM占空比&#xff0c;在这种情况下&#xff0c;采样频率&…

小红书自动私信获客,打造个人品牌

在当今这个内容为王、社交至上的时代&#xff0c;小红书作为新兴的社交电商平台&#xff0c;凭借其独特的社区氛围和强大的种草能力&#xff0c;成为了众多KOL、商家以及个人品牌打造的首选平台。想要在小红书上脱颖而出&#xff0c;精准引流获客&#xff0c;利用自动私信功能不…

【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

文章目录 1. 环境准备2. 增加数据&#xff08;Create&#xff09;3. 查询数据&#xff08;Retrieve&#xff09;4. 更新数据&#xff08;Update&#xff09;5. 删除数据&#xff08;Delete&#xff09;6. 总结 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实…

强化训练:day8(求最小公倍数、数组中的最⻓连续⼦序列、字⺟收集)

文章目录 前言1. 最小公倍数1.1 题目描述1.2 解题思路1.3 代码实现 2. 数组中的最⻓连续⼦序列2.1 题目描述2.2 解题思路2.3 代码实现 3. 字母收集3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 1. 最小公倍数   2. 数组中的最⻓连续⼦序列   3. 字⺟收集 1. 最小公倍数…

JavaScript中内存泄露的几种情况

在JavaScript开发中&#xff0c;内存泄露是一个常见且可能严重的问题。内存泄露通常发生在程序在不需要某些数据时仍然保留这些数据的引用&#xff0c;导致这些数据无法被垃圾回收机制清除。在长时间运行的Web应用程序或Node.js应用中&#xff0c;内存泄露可能会导致性能下降、…

6-2 递归求Fabonacci数列

作者 C课程组 单位 浙江大学 本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下&#xff1a; f(n)f(n−2)f(n−1) (n≥2)&#xff0c;其中f(0)0&#xff0c;f(1)1。 函数接口定义&#xff1a; int f( int n );函数f应返回第n个Fabonacci数。题目保证输入输出…

JavaEE之线程(5)——Java内存模型、内存可见性、volatile关键字

前言 volatile可以理解成轻量级的 synchronized&#xff0c; 它在多CPU开发中保证了共享变量的“可见性”&#xff0c;可见性我们可以理解成是&#xff1a;当一个线程修改一个共享变量时&#xff0c;另一个线程可以读到这个修改的值。由于它不会引起线程的上下文切换和调度&am…

HTML的使用(中)

文章目录 前言一、HTML表单是什么&#xff1f;二、HTML表单的使用 &#xff08;1&#xff09;<form>...</form>表单标记&#xff08;2&#xff09;<input>表单输入标记总结 前言 在许多网页平台上浏览&#xff0c;大多逃不了登录账号。此时在网页中填写的用户…

Centos 7.9 安装 tigervnc-server

环境&#xff1a;当前使用的 Centos 7.9 的光盘作为的本地源&#xff0c;或使用离线rpm包。 1 检查是否已安装 tigervnc [rootlocalhost /]# rpm -q tigervnc tigervnc-server 未安装软件包 tigervnc tigervnc-server-1.8.0-21.el7.x86_64 如果安装过卸掉 卸载: rpm -e [ro…

MYSQL DBA运维实战 SQL2

1.DML:通过SQL语句中的DML语言来实现数据的操作。 insert实现数据的插入。 update实现数据的更新。delete实现数据的删除。 插入&#xff0c;完全插入insert into 表名 values(值) 非完全插入:insert into 表名(列名&#xff0c;列名) values(值) 更新&#xff0…

RustGUI学习(iced)之小部件(十二):如何使用rule分割线部件来分割UI?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第十二篇,主要讲述rule分割线部件的使用,会结合…

【计算机网络】http协议的原理与应用,以及https是如何保证安全传输的

HTTP 超文本传输协议&#xff08;英文&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆伯纳斯-李于1989年在欧洲核子研究组织…

Vue2响应式原理详解

Object.defineProperty 通过Object.defineProperty方法进行数据代理&#xff0c; 用vm对象的属性来代理data对象的属性 方法案例 /* 此方法用于定义或修改对象属性的方法。它允许你精确地控制属性的行为&#xff0c;包括属性的值、可枚举性、可配置性和可写性。 接受三个参数…

React useEffect Hook: 理解和解决组件双重渲染问题

在React中&#xff0c;useEffect可能会在组件的每次渲染后运行&#xff0c;这取决于它的依赖项。如果你发现useEffect运行了两次&#xff0c;并且你正在使用React 18或更高版本的严格模式&#xff08;Strict Mode&#xff09;&#xff0c;这可能是因为在开发模式下&#xff0c;…

PyTorch 的 hook 功能监控和分析模型的内部状态

PyTorch 的 hook 功能是一种强大的工具&#xff0c;它允许用户在模型的前向传播&#xff08;forward pass&#xff09;和后向传播&#xff08;backward pass&#xff09;的任意点插入自定义函数。这些自定义函数可以用于监控、分析、调试或修改模型的内部状态&#xff0c;如激活…