模拟接口数据之使用Fetch方法实现

文章目录

  • 前言
  • 一、package.json配置mock执行脚本
  • 二、封装接口,区分走ajax还是fetch
  • 三、创建mock目录,及相关接口文件
  • 四、定义接口
  • 五、使用mock数据
    • 使用模拟数据
    • 优化fetch返回数据
  • 六、不使用模拟数据
  • 七、对比其他需要使用依赖相关配置
    • `如有启发,可点赞收藏哟~`


前言

在前后端分离的项目,模拟数据显示格外重要。要么接口出现异常,要么后台接口还未能调用成功…

网上有很多关于处理mock数据的依赖插件,那么在不需要其他依赖的情况下,配置本地mock数据,需要怎样获取呢?

咱这里直接使用Es6提供的Fetch内置方法

  • 该fetch()方法启动从服务器获取资源的过程。
  • 该fetch()方法返回一个解析为 Response 对象的 Promise。
  • 😀不再需要 XMLHttpRequest。

本文基于vite+vue3+ts项目构建详细步骤(配置多语言版本)项目格式扩展,如需了解请移步。


一、package.json配置mock执行脚本

"mock": "vite serve --mode mock",

在这里插入图片描述

二、封装接口,区分走ajax还是fetch

这里只封装getpost方法。

  • 使用vite中的import.meta.env.MODE判断

/*** 发起GET请求, 泛型 T 定义返回数据 data 项类型, U 定义请求数据类型* @param {string} url 请求链接* @param {object} params 请求参数* @param {object} config 配置*/
export const get = <U = unknown, T = unknown>(url: string,params?: U,config?: AxiosRequestConfig,
) => {console.log(config?.baseURL)if (import.meta.env.MODE === 'mock') {return fetch(`/mock${url}.json`)} else {return axios.get<T, T>(url, { params: { ...params, t: Date.now() }, ...config },)}
}/*** 发起POST请求, 泛型 T 定义返回数据 data 项类型, U 定义请求数据类型* @param {string} url 请求链接* @param {object} params 请求参数* @param {object} config 配置*/
export const post = <U = unknown, T = unknown>(url: string,params?: U,config: AxiosRequestConfig = {},
) => {console.log('config_config', config)if (import.meta.env.MODE === 'mock') {return fetch(`/mock${url}.json`)}if (Array.isArray(params)) {return axios.post<T, T>(url, [...params], config)}return axios.post<T, T>(url, { ...params }, config)
}

在这里插入图片描述

三、创建mock目录,及相关接口文件

现在项目根目录新建mock文件夹,然后根据实际接口新建对应文件
例如:接口路径为 /usr/getUser
在mock文件夹下新建usr目录,然后再usr内新建getuser.json文件

{"code": 200,"data": {"userName": "用户名","emali": "shimianshijian@qa.com"},"message": "OK"
}

在这里插入图片描述

四、定义接口

  • /src/usr/index.ts定义/usrgetUser接口
import { get, post } from ".."
export const getUser = () => {return get<null, null>('/usr/getUser')
}
export const getUserP = () => {return post<null, null>('/usr/getUser')
}

在这里插入图片描述

  • 在main,js调用
import { getUser, getUserP } from './server/usr'
getUser()
getUserP()

五、使用mock数据

使用模拟数据

npm run mock

如图可看到请求类型为fetch,并返回了对应数据
在这里插入图片描述
在这里插入图片描述

优化fetch返回数据

  • 不过打印出来的数据并不是想要的效果,别急,咱可再次封装fetch方法,使其返回需要的对象数据
    在这里插入图片描述
  • 封装fetch

封装fetch并修改getpost中的fetch,代码如下

export const getFetchData = async(url: string) => {const fetchFile = await fetch(url)const fetchENV = await fetchFile.json()return fetchENV
};
.../*** 发起GET请求, 泛型 T 定义返回数据 data 项类型, U 定义请求数据类型* @param {string} url 请求链接* @param {object} params 请求参数* @param {object} config 配置*/
export const get = <U = unknown, T = unknown>(url: string,params?: U,config?: AxiosRequestConfig,
) => {console.log(config?.baseURL)if (import.meta.env.MODE === 'mock') {return getFetchData(`/mock${url}.json`)} else {return axios.get<T, T>(url, { params: { ...params, t: Date.now() }, ...config },)}
}/*** 发起POST请求, 泛型 T 定义返回数据 data 项类型, U 定义请求数据类型* @param {string} url 请求链接* @param {object} params 请求参数* @param {object} config 配置*/
export const post = <U = unknown, T = unknown>(url: string,params?: U,config: AxiosRequestConfig = {},
) => {console.log('config_config', config)if (import.meta.env.MODE === 'mock') {return getFetchData(`/mock${url}.json`)}if (Array.isArray(params)) {return axios.post<T, T>(url, [...params], config)}return axios.post<T, T>(url, { ...params }, config)
}

修改后数据打印如下,具体可根据实际拦截器是否返回codemessage这一级别数据(即需要修改为数据同级)
在这里插入图片描述

六、不使用模拟数据

npm run dev

如图可看到请求类型为xhr,说明区分模拟数据生效了
在这里插入图片描述

七、对比其他需要使用依赖相关配置

如上配置,同其他mock方式有同样的效果,且无需再安装各种依赖,简单又实用。

如有启发,可点赞收藏哟~

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

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

相关文章

SpringBoot整合Dubbo和Nacos

1.概述 dubbo是一个高性能、轻量级的开源分布式服务框架&#xff0c;早期由阿里巴巴进行开源。它提供了服务注册、发现、调用和负载均衡等分布式服务治理功能&#xff0c;为分布式开发提供了极大便利。dubbo核心概念包括&#xff1a;Provider&#xff08;消费提供者&#xff0…

代驾预约小程序系统源码 :提起预约,避免排队 带完整搭建教程

大家好啊&#xff0c;又到罗峰来给大家分享好用的源码系统的时间了。今天要给大家分享的第一款代驾预约小程序源码系统。传统的代驾服务中&#xff0c;用户往往需要在酒后代驾、长途驾驶等场景下&#xff0c;面对排队等待代驾司机空闲时间的繁琐过程。这不仅浪费了用户的时间和…

Centos7安装mysql8.0.35(亲测)

今天在centos7上安装了mysql8&#xff0c;特此记录以作备忘。 说明&#xff1a; - 我安装的mysql版本&#xff1a;8.0.35 - centos版本&#xff1a;7 - 我的虚拟机没安装过mysql,如果之前安装过mysql记得卸载干净 - 卸载步骤&#xff1a; - rpm -qa|grep mysql (搜索mysql)比如…

uniapp——项目day04

购物车页面——商品列表区域 渲染购物车商品列表的标题区域 1. 定义如下的 UI 结构&#xff1a; 2.美化样式 渲染商品列表区域的基本结构 1. 通过 mapState 辅助函数&#xff0c;将 Store 中的 cart 数组映射到当前页面中使用&#xff1a; import badgeMix from /mixins/tab…

sqli-labs关卡16(基于post提交的双引号加括号闭合的布尔盲注)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第十六关通关思路1、判断注入点2、猜数据库长度3、猜数据库名字4、猜表名长度5、猜表名名字6、猜列名长度7、猜列名名字8、猜数据长度9、猜数据名字 总结 前言 此文章只用于学习和反思巩固sql注入知识&#xff0c;禁止用于做非法攻击…

多机器人群体的任务状态与机器人状态同步设计思路

背景技术 近年来&#xff0c;随着科学技术的发展需要&#xff0c;机器人技术不断进步。面临任务的日益复杂化&#xff0c;单机器人在很多环境下已经无法满足生产要求&#xff0c;于是国内外科研工作者对多机器人技术投入了大量关注&#xff0c;提出了利用多机器人协作来代替单机…

【LLMs】从大语言模型到表征再到知识图谱

从大语言模型到表征再到知识图谱 InstructGLMLLM如何学习拓扑&#xff1f;构建InstructGLM泛化InstructGLM补充参考资料 2023年8月14日&#xff0c;张永峰等人的论文《Natural Language is All a Graph Needs》登上arXiv街头&#xff0c;轰动一时&#xff01;本论文概述了一个名…

线性代数本质系列(二)矩阵乘法与复合线性变换,行列式,三维空间线性变换

本系列文章将从下面不同角度解析线性代数的本质&#xff0c;本文是本系列第二篇 向量究竟是什么&#xff1f; 向量的线性组合&#xff0c;基与线性相关 矩阵与线性相关 矩阵乘法与复合线性变换 三维空间中的线性变换 行列式 逆矩阵&#xff0c;列空间&#xff0c;秩与零空间 克…

BEVFormer 论文阅读

论文链接 BEVFormer BEVFormer&#xff0c;这是一个将Transformer和时间结构应用于自动驾驶的范式&#xff0c;用于从多相机输入中生成鸟瞰&#xff08;BEV&#xff09;特征利用查询来查找空间/时间&#xff0c;并相应地聚合时空信息&#xff0c;从而为感知任务提供更强的表示…

AI 绘画 | Stable Diffusion精确控制ControlNet扩展插件

ControlNet ControlNet是一个用于控制AI图像生成的插件&#xff0c;通过使用Conditional Generative Adversarial Networks&#xff08;条件生成对抗网络&#xff09;的技术来生成图像。它允许用户对生成的图像进行更精细的控制&#xff0c;从而在许多应用场景中非常有用&#…

工业数据的“最后一公里”怎么走?

随着工业互联网的迅猛发展&#xff0c;工业数据已经成为推动制造业转型升级的重要动力。然而&#xff0c;面对海量的工业数据&#xff0c;如何高效、准确地走过数据的“最后一公里”&#xff0c;成为制约企业发展的关键问题。本文将探讨工业数据“最后一公里”所面临的挑战&…

nginx四层tcp负载均衡及主备、四层udp负载均衡及主备、7层http负载均衡及主备配置(wndows系统主备、负载均衡)

准备工作 服务器上安装、配置网络负载平衡管理器 windows服务器热备、负载均衡配置-CSDN博客 在windows服务器上安装vmware17 在windows上利用vmware17 搭建centos7 mini版本服务器 设置好静态ip地址&#xff08;因为windows 服务器上的网络负载平衡管理器不支持dhcp的服务器…

Docker的本地镜像发布到阿里云或者私有库步骤

学习笔记来源Docker 本地镜像发布到阿里云 1、生成镜像&#xff08;使用commit命令&#xff09; 创建阿里云仓库镜像 阿里云开发者平台 https://promotion.aliyun.com/ntms/act/kubernetes.html 创建仓库镜像 选择控制台&#xff0c;进入容器镜像服务 选择个人实例 命名空…

adb常用命令

系统参数获取指令 获取手机系统的命令&#xff1a; adb shell getprop ro.build.version.release 获取系统api版本----比如系统对应的系统的API版本为&#xff1a;29&#xff0c;11系统对应的安卓系统API版本为&#xff1a;30 adb shell getprop ro.build.version.sdk 获取手机…

雅虎、美客多、Temu、Allegro、亚马逊跨境平台选品技巧方法,测评养号攻略。

&#xff08;1) Best Sellers选品法 这个方法顾名思义&#xff0c;就是大家熟悉的热销榜单选品法。 不做过多解释&#xff0c;在自己熟悉的品类&#xff0c;隔几天就会观察一下前100名里有没有冒出什么新品。 它和现有的产品相同还是不同&#xff0c;自己做哪些搭配或者迭代…

asp.net core mvc之模型绑定、特性约束模型绑定、模型验证(服务器/客户端/远程)

一、不用模型绑定 数据类型都是string 1、UserController.cs public class UserController : Controller {public IActionResult Register(){return View();}[HttpPost]public IActionResult DoRegister(){//不用模型绑定 以前的方法取表单数据或Url的参数//数据类型都是s…

linux系统下文件操作常用的命令

一、是什么 Linux 是一个开源的操作系统&#xff08;OS&#xff09;&#xff0c;是一系列Linux内核基础上开发的操作系统的总称&#xff08;常见的有Ubuntu、centos&#xff09; 系统通常会包含以下4个主要部分 内核shell文件系统应用程序 文件系统是一个目录树的结构&…

双编码器构建机器人零力拖动/导纳控制思路

前言 这篇博客主要记录昨日与实验室大佬针对UR5机器人拖动示教功能实现的思路。由于本人并非主攻力控方面。直到昨天在做实验的时候&#xff0c;与力控组的大佬讨论过后才了解UR机器人实现导纳控制的思路。 关于导纳控制/零力拖动 导纳控制与阻抗控制单从字面去理解很容易记…

如何编写一个Perl爬虫程序

要编写一个Perl爬虫程序&#xff0c;首先需要安装LWP::UserAgent模块。你可以使用cpan命令来安装该模块&#xff1a; cpan LWP::UserAgent 安装完成后&#xff0c;可以使用以下代码来编写爬虫程序&#xff1a; use LWP::UserAgent; use HTML::TreeBuilder; my $proxy_host …

分发饼干(贪心算法+图解)

455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 题目描述 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最…