前后端分离,使用MOCK进行数据模拟开发,让前端攻城师独立于后端进行开发

mock是什么

Mock生成随机数据,拦截Ajax 请求,前后端分离,让前端攻城师独立于后端进行开发。 增加单元测试的真实性 通过随机数据,模拟各种场景。
在实际开发过程中,前端是通过axios来请求数据的,很多时候前端开发者就是通过写固定的JSON数据来模拟数据,但是这个JSON是一个对象,没有经过数据请求的情况下直接使用,在后续的工作中要等到后端将API写好以后再进行对接API,而mock就是通过拦截真实的axios的请求来模拟数据,相当于通过mock写一个假的API,并直接拿来使用,前端开发人员是可以真实的写一个axios请求的
简单来说,mock就是假的API

(一)前提条件

vue项目已经进行了axios请求接口封装,可以正常的请求后端接口(我用的是登录接口测试是合适的)。

(二)安装

我使用的是vue的vite(Vue3的)框架。使用的依赖是以下两个依赖。

"vite-plugin-mock": "^2.9.6",
"mockjs": "^1.1.0",

(三)配置

vite.config.js 文件中引入并配置这个插件:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { viteMockServe } from 'vite-plugin-mock'export default defineConfig({plugins: [vue(),viteMockServe({ignore: /^\_/,mockPath: 'mock',localEnabled: !isBuild,//表示是否在本地环境中启用Mock服务器。如果isBuild为false,则localEnabled为true,表示在本地环境中启用Mock服务器;反之亦然。prodEnabled: isBuild,//表示是否在生产环境中启用Mock服务器。如果isBuild为true,则prodEnabled为true,表示在生产环境中启用Mock服务器;反之亦然。injectCode: `import { setupProdMockServer } from '../mock/_createProductionServer';setupProdMockServer();`,}),],
})

创建mock服务
其中**/mock/_createProductionServer**文件如下:

import { createProdMockServer } from 'vite-plugin-mock/es/createProdMockServer';const modules = import.meta.glob('./**/*.ts', { eager: true });const mockModules: any[] = [];
Object.keys(modules).forEach((key) => {if (key.includes('/_')) {return;}mockModules.push(...(modules as Recordable)[key].default);
});/*** Used in a production environment. Need to manually import all modules*/
export function setupProdMockServer() {createProdMockServer(mockModules);
}

(四)实例

1、在mock文件夹中的一个house.ts文件:

import { MockMethod } from 'vite-plugin-mock';
import { resultPageSuccess, resultSuccess, baseUrl } from '../_util';const testList = (() => {const result: any[] = [];for (let index = 0; index < 40; index++) {result.push({id: index,apartment: '@integer(1,4)',//公寓楼--字典building: '@integer(1,10)',//栋数--字典room: '@integer(1,32)' + '0' + '@integer(1,9)' + '-' + '@integer(1,6)',// 房间--stringtype: '@integer(1,4)',//户型--字典address: "@county(true)", // 地址--stringarea: '@integer(15,90)',//面积--数字status: '@integer(1,2)',// 入住状态--字典matching: "@ctitle",//房屋配套---stringdecorationTime: "@date(yyyy-MM-dd)", //装修时间--datacheckDate: "@date(yyyy-MM-dd)", // 预入住时间---datarent: "@float(500,4000,0,2)",//租金---floatmanagerId: "admin",// 用户(公寓管理员)标识--用户列表中的username字段---根据实际情况定是否使用该字段managerName: "@cname",//用户名称(公寓管理员)---后端根据用户标识匹配返回前端pictureList: "@image", // 多张图片remarks: "@ctitle", // 备注信息---富文本identityCard: /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,//身份证号码-----numberphone: /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,//生成的符合正则表达式的字符串identificationPhoto: "@image(35x50)", // 证件照--一张图片});}return result;
})();const info = (() => {const result = {id: 1,apartment: '2',building: '9',room: '@integer(1,32)' + '0' + '@integer(1,9)' + '-' + '@integer(1,6)',type: '4',address: "@county(true)",area: '@integer(15,90)',status: '1',matching: "@ctitle",decorationTime: "@date(yyyy-MM-dd)",checkDate: "@date(yyyy-MM-dd)",rent: "@float(500,4000,0,2)",managerId: "admin",managerName: "@cname",pictureList: "@image",remarks: "@ctitle",}return result;
})();export default [{url: `${baseUrl}/internetOfThings/getHouseList`,timeout: 1000,method: 'get',response: ({ query }) => {const { page = 1, pageSize = 20 } = query;return resultPageSuccess(page, pageSize, testList);},},{url: `${baseUrl}/internetOfThings/getHouseInfo`,timeout: 1000,method: 'get',response: () => {return resultSuccess(info);},},
] as MockMethod[];

其中_util.ts文件:

export function resultSuccess<T = Recordable>(result: T, { message = 'ok' } = {}) {return {code: 0,result,message,type: 'success',};
}export function resultPageSuccess<T = any>(pageNo: number,pageSize: number,list: T[],{ message = 'ok' } = {}
) {const pageData = pagination(pageNo, pageSize, list);return {...resultSuccess({records: pageData,total: list.length,}),message,};
}export function resultError(message = 'Request failed', { code = -1, result = null } = {}) {return {code,result,message,type: 'error',};
}export function pagination<T = any>(pageNo: number, pageSize: number, array: T[]): T[] {const offset = (pageNo - 1) * Number(pageSize);const ret =offset + Number(pageSize) >= array.length? array.slice(offset, array.length): array.slice(offset, offset + Number(pageSize));return ret;
}export interface requestParams {method: string;body: any;headers?: { authorization?: string };query: any;
}/*** @description 本函数用于从request数据中获取token,请根据项目的实际情况修改**/
export function getRequestToken({ headers }: requestParams): string | undefined {return headers?.authorization;
}//TODO 接口父路径(写死不够灵活)
export const baseUrl = '/api/mock';

2、mock API书写

就像平时请求API的接口一样正常请求数据,defHttp 是封装好的axios请求封装好的函数,没有做其他操作。

import { defHttp } from '/@/utils/http/axios';enum Api {houseList = '/mock/internetOfThings/getHouseList',houseInfo = '/mock/internetOfThings/getHouseInfo',
}/*** @description: 房源管理--列表*/export const getHouseList = (params) => {// console.log(params,"API传参");return defHttp.get({ url: Api.houseList, params });
}
/*** 详情* */
export const getHouseInfo = (id) => {return defHttp.get({ url: Api.houseInfo, id });}

3、API的实际使用

  getHouseList(recordId.value).then((res) => {console.log(res, '请求数据');});

(五)效果

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

1.Seata 1.5.2 seata-server搭建

一&#xff1a;Seata基本介绍 Seata是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 详见官网链接&#xff1a;https://seata.apache.org/zh-cn/ 1.历史项目里的使用经验&#xff1a; 之前公司里的oem用户对应的App…

C# 修改项目类型 应用程序程序改类库

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

Docker学习笔记(四)单主机网络

简介 Docker从容器中抽象除出了底层的主机连接网络&#xff0c;使得程序不用关心运行时的环境。连接到Docker网络的容器将获得唯一的地址&#xff0c;其他连接到同一Docker网络的容器也可以根据该IP找到目标容器并发送消息。   但是容器内运行的软件没法方便的确定主机IP地址…

SEGGERS实时系统embOS推出Linux端模拟器

SEGGER 发布了两个新的 embOS 仿真模拟器&#xff1a;embOS Sim Linux 和 embOS-MPU Sim Linux。 通过模拟 Linux 主机系统上的硬件&#xff0c;取代物理硬件&#xff0c;为开发人员提供了一种无缝的方式来构建原型和测试应用程序。 embOS Sim Linux 端口支持 32 位和 64 位系…

网络安全产品认证证书大全(持续更新...)

文章目录 一、引言二、《计算机信息系统安全专用产品销售许可证》2.1 背景2.2 法律法规依据2.3 检测机构2.4 检测依据2.5 认证流程2.6 证书样本 三、《网络关键设备和网络安全专用产品安全认证证书》3.1 背景3.2 法律法规依据3.3 检测机构3.4安全认证和安全检测依据标准3.5 认证…

费用管理系统如何优化企业年报台账归集流程?

随着企业规模的扩大和业务的复杂化&#xff0c;财务管理工作的重要性日益凸显。其中&#xff0c;年报台账归集作为财务管理的重要环节&#xff0c;不仅关乎企业财务数据的准确性和完整性&#xff0c;更直接影响到企业决策的科学性和合理性。面对海量的财务数据和复杂的归集要求…

下载 llama2-7b-hf 全流程【小白踩坑记录】

1、文件转换 在官网 https://ai.meta.com/llama/ 申请一个账号&#xff0c;选择要下载的模型&#xff0c;会收到一个邮件&#xff0c;邮件中介绍了下载方法 执行命令 git clone https://github.com/meta-llama/llama.git​ &#xff0c;然后执行 llama/download.sh&#xff0c…

[数据集][目标检测]车窗状态检测车窗开关检测数据集VOC+YOLO格式299张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;299 标注数量(xml文件个数)&#xff1a;299 标注数量(txt文件个数)&#xff1a;299 标注类别…

【零成本】七日杀 服务器搭建 异地联机 无需公网IP、服务器

主要内容 什么是七日杀 搭建前需要准备什么 详细步骤 1.Steam中下载七日杀服务器工具 2.修改七日杀服务配置文件 3.启动七日杀服务器应用 4.运行 MoleSDN 进行异地联机 5.小伙伴打开游戏加入 鼠鼠的服务器 什么是七日杀 《七日杀》是一款沙盒生存恐怖游戏&#xff0c;…

海外云手机怎么实现TikTok多账号防关联?

TikTok多账号运营&#xff0c;作为众多用户选择的引流策略&#xff0c;旨在通过多账号的协同作用&#xff0c;更快速、高效地推动主账号的流量增长。然而&#xff0c;这一策略面临着一个关键难题——TikTok账号防关联。本文将简要介绍海外云手机如何解决这一问题。 在TikTok多账…

携手科大讯飞丨云衔科技为企业提供全栈AI技术解决方案

作为智能时代的核心驱动力&#xff0c;人工智能不仅重塑了传统行业的面貌&#xff0c;更开辟了全新的经济增长点。科大讯飞以其深厚的技术底蕴和创新能力&#xff0c;持续引领着人工智能领域的发展潮流。云衔科技作为科大讯飞开放平台的AI技术产品线合作伙伴代理商&#xff0c;…

c# 开发串口调试助手 Visual Studio 2019

一、串口调试工具作用 串口调试助手是用于在开发、测试和调试串口通信应用程序时进行串口数据的监视和交互的工具。它通常具有以下功能&#xff1a; 1. 串口参数设置&#xff1a;允许用户设置串口的波特率、数据位、校验位、停止位等参数。 2. 串口连接管理&#xff1a;允许用…

CAD中的spline详解

从dxf文件中提取点、直线、圆、弧等元素比较简单&#xff0c;但是Spline的处理比较麻烦。经过一段时间探索总结一下成果。 一、基本公式 1.有理样条曲线 查阅一些资料&#xff0c;认为CAD中使用的Spline 是非均匀有理样条曲线。实测CAD中每个控制点权重都是-1&#xff0c;所以…

物联网行业中小型嵌入式文件系统详解以及使用

一 概述 在嵌入式系统使用过程中&#xff0c;为了方便数据的存储&#xff0c;我们加入了串行的外部Flash(SPI通信)。在使用存储的时候&#xff0c;如需要记录一个字符串“奇迹物联Bloom OS”&#xff0c;我们可以把这些文字转化成 ASCII 码&#xff0c;存储在数组中&#xff0c…

WPF DataGrid 列表中,DataGrid.Columns 列根据不同的值显示不同内容

需求&#xff1a;在WPF DataGrid 控件中&#xff0c;有以下列&#xff0c;绑定了一个LogType&#xff0c;值分别是0,1,2&#xff0c;根据不同的值&#xff0c;显示不同的内容以及背景 <DataGrid ItemsSource"{Binding EventLog}"><DataGrid.Columns><…

Vue路由二(嵌套多级路由、路由query传参、路由命名、路由params传参、props配置、<router-link>的replace属性)

目录 1. 嵌套(多级)路由2. 路由query传参3. 路由命名4. 路由params传参5. props配置6. <router-link>的replace属性 1. 嵌套(多级)路由 pages/Car.vue <template><ul><li>car1</li><li>car2</li><li>car3</li></ul…

postgresql-patroni高可用安装部署

简介 patronietcd,算是目前比较主流的PG高可用搭配了。 patroni都出4.0版本了,一直没时间&#xff0c;断断续续写了好久&#xff0c;最近有人问到&#xff0c;那就当作一个笔记发表吧&#xff0c;自行搭建一个测试库做测试吧。来来回回改了好几遍。文中可能不妨地方没有同步修…

Linux使用Clash,clash-for-linux

文件下载 clash-for-linuxhttps://link.zhihu.com/?targethttps%3A//zywang.lanzn.com/ijE2a1m7h6mb&#xff08;百度和阿里云盘都不支持这个文件分享&#xff09;。 使用须知 - 此项目不提供任何订阅信息&#xff0c;请自行准备Clash订阅地址。 - 运行前请手动更改.env文件…

掌握ChatGPT:高效利用AI助手

2023 年 3 月 15 日&#xff0c;ChatGPT-4 的诞生标志着人类进入了一个全新的 人机协作时代。这个时代就像一个混沌初开的新世界&#xff0c;而 ChatGPT 则是这个新世界里诞生的一个新物种。 这个新物种的心智如同一个四五岁的小孩&#xff0c;在与它频繁互动中&#xff0c;人…

BFS 解决边权为1的最短路问题

文章目录 边权为1的最短路问题1926. 迷宫中离入口最近的出口题目解析算法原理代码实现 433. 最小基因变化题目解析算法原理代码实现 127. 单词接龙题目解析算法原理代码实现 675. 为高尔夫比赛砍树题目解析算法原理代码实现 边权为1的最短路问题 最短路问题&#xff1a; 比如…