模拟接口数据之使用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.hqwc.cn/news/171450.html

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

相关文章

Linux 性能调优之硬件资源监控

写在前面 考试整理相关笔记博文内容涉及 Linux 硬件资源监控常见的命名介绍&#xff0c;涉及硬件基本信息查看查看硬件错误信息查看虚拟环境和云环境资源理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#x…

Linux常用命令——bzip2命令

在线Linux命令查询工具 bzip2 将文件压缩成bz2格式 补充说明 bzip2命令用于创建和管理&#xff08;包括解压缩&#xff09;“.bz2”格式的压缩包。我们遇见Linux压缩打包方法有很多种&#xff0c;以下讲解了Linux压缩打包方法中的Linux bzip2命令的多种范例供大家查看&…

Mac 本地部署thinkphp8【部署环境以及下载thinkphp】

PHP的安装以及环境变量配置 1 PHP安装&#xff1a;在终端输入brew install php 这里是PHP下载的最新的 如果提示‘brew’找不到&#xff0c;自己搜索安装吧&#xff0c; 不是特别难 2 环境变量配置 终端输入vim ~/.bash_profile 输入export PATH"/usr/local/Cellar/php/8.…

C++阶段复习‘‘‘‘总结?【4w字。。。】

文章目录 前言类和对象C类定义和对象定义类成员函数C 类访问修饰符公有&#xff08;public&#xff09;成员私有&#xff08;private&#xff09;成员受保护&#xff08;protected&#xff09;成员 继承中的特点类的构造函数和析构函数 友元函数内联函数this指针指向类的指针类…

集成Line、Facebook、Twitter、Google、微信、QQ、微博、支付宝的三方登录sdk

下载地址&#xff1a; https://githubfast.com/anerg2046/sns_auth 安装方式建议使用composer进行安装 如果linux执行composer不方便的话&#xff0c;可以在本地新建个文件夹&#xff0c;然后执行上面的composer命令&#xff0c;把代码sdk和composer文件一起上传到项目适当位…

Spring事务之AOP导致事务失效问题

情况说明 首先开启了AOP&#xff0c;并且同时开启了事务。下面这个TransactionAspect就是一个简单的AOP切面&#xff0c;有一个Around通知。 Aspect Component public class TransactionAspect {Pointcut("execution(* com.qhyu.cloud.datasource.service.TransactionSe…

【Android】画面卡顿优化列表流畅度四之Glide几个常用参数设置

好像是一年前快两年了&#xff0c;笔者解析过glide的源码&#xff0c;也是因为觉得自己熟悉一些&#xff0c;也就没太关注过项目里glide的具体使用对当前业务的影响&#xff1b;主要是自负&#xff0c;还有就是真没有碰到过这样的数据加载情况。暴露了经验还是不太足够 有兴趣的…

Vue知识点总结

路由 使用 参数传递的两种方式 路由的params传参 路由的query传参 组件 概念 局部功能代码&#xff08;html、css js&#xff09;和资源(mp3 mp4 ttf .zip)的集合 非单文件组件 一个文件对应多个组件&#xff0c;以html结尾 使用 <xuexiao>即可使用 注意&#xf…

nacos适配达梦数据库

一、下载源码 源码我直接下载gitee上nacos2.2.3的&#xff0c;具体链接&#xff1a;https://gitee.com/mirrors/Nacos/tree/2.2.3&#xff0c;具体如下图&#xff1a; 二、集成达梦数据库驱动 解压源码包&#xff0c;用idea打开源码&#xff0c;等idea和maven编译完成&#xff…

STM32--时钟树

一、什么是时钟&#xff1f; 时钟是单片机的脉搏&#xff0c;是系统工作的同步节拍。单片机上至CPU&#xff0c;下至总线外设&#xff0c;它们工作时序的配合&#xff0c;都需要一个同步的时钟信号来统一指挥。时钟信号是周期性的脉冲信号。 二、什么是时钟树&#xff1f; S…

【分享】Excel“只读方式”的两种模式

查阅Excel表格的时候&#xff0c;担心不小心修改了内容&#xff0c;可以给Excel设置以“只读方式”打开&#xff0c;这样就算修改了内容也不能直接保存表格。Excel表格可以设置两种“只读方式”&#xff0c;一起来看看吧&#xff01; “只读方式” 1&#xff1a; 打开Excel表…

图论15-有向图-环检测+度数+欧拉回路

文章目录 1. 有向图设计1.1 私有变量标记是否有向1.2 添加边的处理&#xff0c;双向变单向1.3 删除边的处理&#xff0c;双向变单向1.4 有向图的出度和入度 2 有向图的环检测2.1 普通的算法实现换检测2.2 拓扑排序中的环检测 3 欧拉回路 1. 有向图设计 1.1 私有变量标记是否有…