前端项目接口请求封装

封装写法一:

// 封装接口请求函数  
function request(url, method, data, headers) {  return new Promise((resolve, reject) => {  const xhr = new XMLHttpRequest();  xhr.open(method, url);  // 设置请求头  if (headers) {  Object.keys(headers).forEach(key => {  xhr.setRequestHeader(key, headers[key]);  });  }  // 监听请求完成的事件  xhr.onload = function() {  if (xhr.status >= 200 && xhr.status < 300) {  resolve(xhr.response);  } else {  reject(xhr.statusText);  }  };  // 监听网络错误的事件  xhr.onerror = function() {  reject("网络错误");  };  // 发送请求  if (method === "GET") {  xhr.send();  } else {  xhr.setRequestHeader("Content-type", "application/json");  xhr.send(JSON.stringify(data));  }  });  
}  
// 使用封装的接口请求函数  
const apiUrl = "https://api.example.com";  
const requestData = { key: "value" };  
request(apiUrl, "POST", requestData)  .then(response => {  console.log("请求成功", response);  })  .catch(error => {  console.error("请求失败", error);  });  

request函数封装了一个基本的接口请求逻辑,包括发送请求、处理响应和错误处理等。它接受四个参数:请求的URL、请求方法、请求数据和请求头。它返回一个Promise对象,可以使用.then.catch方法处理请求成功和失败的情况。

封装写法二:
1. 创建一个api文件夹,用于存放接口相关文件。
2. 在api文件夹中创建一个request.js文件,用于封装接口请求函数。
3. 在request.js文件中,引入axios或其他网络请求库,然后创建一个请求实例。
4. 在请求实例中定义统一的请求拦截器,可以用于设置请求头、处理请求参数等操作。
5. 在请求实例中定义统一的响应拦截器,可以用于处理接口返回的数据格式、统一处理错误等操作。
6. 在request.js文件中,创建一个函数,例如request(url, method, data),用于向外暴露接口请求方法。
7. 在需要发送接口请求的地方,引入request.js文件,并调用其中的接口请求方法。
以下是一个简单示例:

// api/request.js  
import axios from 'axios';  
// 创建请求实例  
const instance = axios.create({  baseURL: 'https://api.example.com', // 设置接口基础路径  timeout: 5000 // 设置请求超时时间  
});  
// 设置请求拦截器  
instance.interceptors.request.use(  config => {  // 在请求发送前进行一些操作,如设置请求头、处理请求参数等  return config;  },  error => {  // 对请求错误进行处理  return Promise.reject(error);  }  
);  
// 设置响应拦截器  
instance.interceptors.response.use(  response => {  // 对接口返回的数据进行处理,如统一处理错误码、格式化数据等  return response.data;  },  error => {  // 对响应错误进行处理  return Promise.reject(error);  }  
);  
// 暴露接口请求方法  
export default function request(url, method = 'GET', data) {  return instance({  url,  method,  data  });  
}  

使用示例:

// 使用接口请求  
import request from './api/request';  
request('/user', 'GET')  .then(response => {  // 处理接口返回的数据  })  .catch(error => {  // 处理接口请求错误  });  

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

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

相关文章

JavaScript中的“??“: 空值合并运算符

在JavaScript中&#xff0c;null和undefined是两个特殊的值&#xff0c;它们表示“无”或“不存在”。在处理这些值时&#xff0c;我们经常需要进行检查以避免出错。在ECMAScript 2021 (ES12)中&#xff0c;引入了一个新的运算符&#xff1a;空值合并运算符&#xff08;Nullish…

怎么把几百M大小的视频做成二维码?扫码播放视频在线教程

怎么把几百M大小的视频做成一个二维码展示呢&#xff1f;通过二维码来作为视频的载体是现在很常用的一种手段&#xff0c;通过这种方式不仅成本比较低&#xff0c;而且传播速度也比较快&#xff0c;通过访问云端数据就可以播放视频。 视频二维码生成的方法一般会通过二维码生成…

C++模版初阶

前言 在本文我们将学习模版的基础知识点&#xff0c;了解泛型编程。 一、泛型编程 1、引入 我们如何实现一个通用的交换函数呢&#xff1f; 我们先看一段代码&#xff0c;如下&#xff1a; void Swap(int& left, int& right) {int temp left;left right;right te…

【DouYing Desktop】

I) JD 全日制大专及以上学历&#xff1b; 2. 3年以上的IT服务支持相关工作经验 3. 有较强的桌面相关trouble shooting与故障解决能力&#xff0c;能够独立应对各类型桌面问题&#xff1b; 4. 具备基础的网络、系统知识&#xff0c;能够独立解决常见的网络、系统等问题&#xf…

机器学习 | 如何利用集成学习提高机器学习的性能?

目录 初识集成学习 Bagging与随机森林 Otto Group Product(实操) Boosting集成原理 初识集成学习 集成学习&#xff08;Ensemble Learning&#xff09;是一种通过组合多个基本模型来提高预测准确性和泛化能力的机器学习方法。它通过将多个模型的预测结果进行整合或投票来做…

Linux 权限设置

修改文件权限:chmod 使用chmod可以修改文件权限 有两种使用格式:字母法与数字法 chmod 字母法的使用 角色说明: 角色 说明 u user, 表示该文件的所有者 g group, 表示用户组 o other, 表示其他用户 a all, 表示所有用户 权限设置说明: 操作符 说明 +

【Java程序设计】【C00243】基于Springboot的社区医院管理系统(有论文)

基于Springboot的社区医院管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的社区医院管理服务系统 本系统分为系统功能模块、管理员功能模块、用户功能模块以及医生功能模块。 系统功能模块&#xff1a;社…

ElementUI Form:Checkbox 多选框

ElementUI安装与使用指南 Checkbox 多选框 点击下载learnelementuispringboot项目源码 效果图 el-checkbox.vue &#xff08;Checkbox 多选框&#xff09;页面效果图 项目里el-checkbox.vue代码 <script> const cityOptions [上海, 北京, 广州, 深圳] export def…

Mysql-备份与恢复

目录 一、备份表 1.无需备份表结构 2.备份表结构 3.mysqldump方式备份表 二、备份库 一、备份表 1.无需备份表结构 CREATE TABLE a_bak as select * from a;#备份表&#xff08;不包含表结构&#xff09;TRUNCATE TABLE a;#清空表 INSERT INTO a SELECT * FROM a_bak;#插…

JProfiler for Mac:提升性能和诊断问题的终极工具

在当今的高性能计算和多线程应用中&#xff0c;性能优化和问题诊断是至关重要的。JProfiler for Mac 是一个强大的性能分析工具&#xff0c;旨在帮助开发者更好地理解其应用程序的运行情况&#xff0c;提升性能并快速诊断问题。 JProfiler for Mac 的主要特点包括&#xff1a;…

app逆向-frida Hook Java类如何打印[object object]

方法一 console.log(JSON.stringify(p))可能打印不出来字符串&#xff0c;一般能打印出p的字节数组。 方法二 1.先确认object是什么类型(比如要打印p) 先console.log(p.$className) 查看p是什么数据类型2.Java.cast 把p强转为对应类型3.调用该类对应的输出方法。通常有一个to…

2024/2/3

一&#xff0e;选择题 1、适宜采用inline定义函数情况是&#xff08;C&#xff09; A. 函数体含有循环语句 B. 函数体含有递归语句‘、考科一 ’ C. 函数代码少、频繁调用 D. 函数代码多、不常调用 2、假定一个函数为A(int i4, int j0) {;}, 则执行“A (1);”语句后&#xff0c…

机器学习复习(2)——线性回归SGD优化算法

目录 线性回归代码 线性回归理论 SGD算法 手撕线性回归算法 模型初始化 定义模型主体部分 定义线性回归模型训练过程 数据demo准备 模型训练与权重参数 定义线性回归预测函数 定义R2系数计算 可视化展示 预测结果 训练过程 sklearn进行机器学习 线性回归代码…

电商小程序01需求分析

目录 1 电商用例分析2 功能架构3 原型开发3.1 首页3.2 店铺页面3.3 配货单3.4 配货单有货3.5 我的应用3.6 商品详情3.7 订单确认3.8 收货地址3.9 店铺详情3.10 店铺分类3.11 商品分类 总结 低代码学习的时候最高效的方法就是带着问题去学习&#xff0c;一般可以先从电商小程序开…

【大数据】Flink SQL 语法篇(三):窗口聚合(TUMBLE、HOP、SESSION、CUMULATE)

Flink SQL 语法篇&#xff08;三&#xff09;&#xff1a;窗口聚合 1.滚动窗口&#xff08;TUMBLE&#xff09;1.1 Group Window Aggregation 方案&#xff08;支持 Batch / Streaming 任务&#xff09;1.2 Windowing TVF 方案&#xff08;1.13 只支持 Streaming 任务&#xff…

配置实例—交换机VLAN聚合配置实例

一、组网需求 某公司拥有多个部门且位于同一网段&#xff0c;为了提升业务安全性&#xff0c;将不同部门的用户划分到不同VLAN中。现由于业务需要&#xff0c;不同部门间的用户需要互通。如图1所示&#xff0c;VLAN2和VLAN3为不同部门&#xff0c;现需要实现不同VLAN间的用户可…

浪漫的通讯录(顺序表篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能…

代码随想录算法训练营第39天 | 62.不同路径 + 63.不同路径 II

今日任务 62.不同路径 63. 不同路径 II 62.不同路径 - Medium 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只…

flutter如何实现省市区选择器

前言 当我们需要用户填写地址时&#xff0c;稳妥的做法是让用户通过“滚轮”来滑动选择省份&#xff0c;市&#xff0c;区&#xff0c;此文采用flutter的第三方库来实现这一功能&#xff0c;比调用高德地图api简单一些。 流程 选择库 这里我选择了一个最近更新且支持中国的…

Acwing 141 周赛 解题报告 | 珂学家 | 逆序数+奇偶性分析

前言 整体评价 很普通的一场比赛&#xff0c;t2思维题&#xff0c;初做时愣了下&#xff0c;幸好反应过来了。t3猜猜乐&#xff0c;感觉和逆序数有关&#xff0c;和奇偶性有关。不过要注意int溢出。 欢迎关注: 珂朵莉的天空之城 A. 客人数量 题型: 签到 累加和即可 import…