前端mock数据的几种方式

news2024/11/16 15:52:11

前端mock数据的几种方式

前端在开发具体需求前,后端往往只提供接口文档,对于前端来说,最简单的方式就是把想要的数据写死在代码里进行开发,但这样的坏处就是和后端联调前还需要再把写死的数据从代码里删除,最好的方式是无侵入的 mock

文章将mock数据的方法总结为4类

  • 死数据
  • 重写请求方法(xhr/fetch
  • node服务
  • 浏览器拦截

死数据

这种方法是最简单的,直接在相关方法里写死数据即可。

比如:

function login() {
  // 直接写死userInfo,先不通过接口获取
  const userInfo = { account: 'account', token: 'abcdef' };
}

对于小型项目而言,用这种方式就可以非常省时省力,不过大型项目或者页面数据非常多的项目则不太适合,后期对接的时候也需要花费一定的时间更改。

重写请求方法(xhr/fetch

json文件

在项目中创建一个json文件,把所有mock数据都放在这个文件中。

{
  "login": {
    "code": 200,
    "msg": "成功",
    "data": {
      "token": "abcdefg"
    }
  },
  "logout": {
    "code": 200,
    "msg": "成功"
  }
}

之后重写xhrfetch方法,将请求直接拦截,并返回json文件中定义的假数据中。

文章只介绍简单的重写fetch方法,xhr方法其实非常类似,就不介绍了,如果大家感兴趣,可以自行实现。

const _fetch = fetch;
fetch = function (input) {
  if (api[input]) {
    return new Promise((resolve) => {
      resolve(api[input]);
    });
  } else {
    return _fetch.call(null, ...arguments);
  }
};

在上面的方法中,从json文件中读取到所有需要拦截的mock数据,只有当没有找到未定义的mock路径时,才会调用原始的fetch方法发送请求去获取。

上述的完整代码如下:

<script type="text/javascript" src="./api.json"></script>
<script src="./index.js"></script>
<script>
  fetch('login').then(res => {
    console.log(res)
  })
</script>

由于浏览器无法直接读取本地文件,因此通过script标签引入json文件(在json文件中定义一个api变量指向json数据,对于一些IDE规则验证无法通过,可能导致无法保存,可以把json后缀改成js)。

demo演示只是用来讲解重写请求方法思路且只使用html开发的一些简单页面。而且现在github上也有很多开源的mock数据的三方库,大家在开发时基本上直接引入这些库进行使用即可。

Mock.js

Mock.js是一个模拟数据生成器,可以让前端独立于后端进行开发,其实原理也是通过拦截 XHRfetch 请求,并返回自定义的数据类型。

Mock.mock("/login", {
  code: 200,
  msg: "成功",
  data: {
    token: "abcdefg",
  },
});

fetch("/api/data", {
  method: "POST",
})
  .then((response) => response.json())
  .then((json) => console.log(json));

而且Mock.js有一个好处就是可以通过它既有的语法来生成一些随机的数据(这样就不需要我们手动输入数据了),每次请求都会返回不同的数据。

Mock.mock('http://api.com', {
  'name': '@cname',     // 中文名称
  "age|20-30": 1      // 20~30随机数,1用来确定类型
});

由于请求在发送前被拦截,实际上并没有发送对应的请求,会导致在 Chrome 控制台就看不见对应的请求。

当然还有wsm这些非常受欢迎的库,这些就不一一介绍了,感兴趣的朋友们自行去阅读相关使用文档。

启动一个node服务

我们可以使用node服务来模拟创建一个服务端,返回的数据其实也可以参照前面提到的json文件格式。

const fs = require("fs");
const http = require("http");

const app = http.createServer((req, res) => {
  const file = JSON.parse(fs.readFileSync("./api.json", "utf-8"));
  if (file[req.url]) {
    res.end(file[req.url]);
  } else {
    res.end({ code: 200 });
  }
});

app.listen(3000, () => {
  console.log("server start");
});

以上也是一个非常简单的例子,可以根据需求来使用express或者koa框架来实现一个更完善的mock服务。

webpack搭建项目

在使用vue2或者webpack搭建项目的时候,webpack内部其实已经启动了一个node服务,用的是Express ,而且它们是同一个团队开发的。

既然已经有了一个 http 服务器,所以也没必要再开启另一个新的http服务了,通过给 webpack 传递一个函数,重写返回的数据即可。

只需要通过 setupMiddlewares 重写数据即可。

const path = require("path");
module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "./dist"),
    filename: "bundle.js",
  },
  devServer: {
    static: path.resolve(__dirname, "./dist"),
    setupMiddlewares: (middlewares, devServer) => {
      if (!devServer) {
        throw new Error("webpack-dev-server is not defined");
      }

      middlewares.unshift({
        path: "/login",
        middleware: (req, res) => {
          // mock 数据模拟接口数据
          res.send({
            code: 200,
            msg: "成功",
            data: {
              token: "abcdefg",
            },
          });
        },
      });

      return middlewares;
    },
  },
};

使用mock网站生成

其实这个也类似于node服务,不过不需要自行写一个mock服务而已,直接在网站上配置即可。

比如easy mock、fastmock

浏览器拦截

just mock

just mock 是一个浏览器插件,在代码中什么都不需要更改,只需要添加相应的接口和数据即可实现拦截。

在just mock网站中下载对应的压缩包,在chrome中加载已解压的扩展程序即可进行使用。

在这里插入图片描述
接着进行相应的编辑添加对应的 mock 数据就好。

在这里插入图片描述
这样接口就会被拦截。

浏览器插件原理和 mockjs 是一样的,但会更加轻便,无需融入到代码中。两者的原理是一样的,都是在网络请求前重写了全局的 xhrfetch

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

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

相关文章

开发中易犯错的事务问题

1.不指定rollbackFor 使用spring的声明式事务&#xff08;即Transactional注解&#xff09;时&#xff0c;如果不指定rollbackFor&#xff0c;那么当程序发生Error时&#xff0c;事务将不会回滚&#xff01;&#xff01;&#xff01;显然这将导致数据不一致&#xff01; 如下述…

spring8-getBean()方法使用

&#xff1b;&#xff1a;getBean使用&#xff0c;要传数据&#xff0c;一个是字符串&#xff0c; 就是文件里的UserService 而这里的UserService就是我们配置文件的id&#xff1a;&#xff0c;第一个API 第二个API可以传入一个字节码类型。 如果某一个容器存在多个&#xff…

windows系统如何部署nacos

1.安装nacos 去nacos github下载nacos最新稳定版本&#xff0c;我用的是nacos-server-2.2.3.zip&#xff0c;下载后解压 2.创建数据库 启动mysql&#xff0c;创建数据库nacos&#xff0c;数据库名字是从conf/application.properties文件获得的 把db这三行取消注释&#xff…

【Hello mysql】 mysql的约束

Mysql专栏&#xff1a;Mysql 本篇博客简介&#xff1a;介绍mysql的约束 mysql的约束 表的约束空属性默认值列描述zerofill主键自增长唯一键外键总结 表的约束 为什么要有约束&#xff1f; 我们在收集一些数据的时候会要求该数据必须存在 比如说像是国家在登记公民信息的时候身…

实验二 常用网络命令

实验目的 了解常用网络命令及其使用方法。通过网络命令了解网络状态&#xff0c;并利用网络命令对网络进行简单的操作。 实验原理 1. 通过 ping 命令检测网络故障 &#xff08;1&#xff09;命令格式&#xff1a; ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v T…

conic-gradient

The conic-gradient() CSS function creates an image consisting of a gradient with color transitions rotated around a center point conic-gradient方法创建了一个由围绕中心点旋转渐变组成的图片 background: conic-gradient( red 6deg, orange 6deg 18deg, yellow…

位图|布隆过滤器模拟实现|STL源码剖析系列|手撕STL

今天博主给大家带来位图和布隆过滤器的模拟实现。 前言 那么这里博主先安利一下一些干货满满的专栏啦&#xff01; 手撕数据结构https://blog.csdn.net/yu_cblog/category_11490888.html?spm1001.2014.3001.5482这里包含了博主很多的数据结构学习上的总结&#xff0c;每一篇…

并发编程 - 利用Event Bus模式实现目录文件变化捕捉

文章目录 Pre需求CodeDirectoryTargetMonitorFileChangeEventFileChangeListener测试 Pre 并发编程 - Event Bus 设计模式 需求 JDK自1.7版本后提供了WatchService类&#xff0c;该类可以基于事件通知的方式监控文件或者目录的任何变化&#xff0c;文件的改变相当于每一个事件…

Java继承和多态

文章目录 继承继承概念继承的语法 super关键字super和this继承方式多态多态的概念多态实现条件 重写重写和重载的区别 继承 Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&#xff0c;事物之间可能会…

Linux 内核级通用内存池 —— kmalloc 体系

目录 kmalloc 内存池中都有哪些尺寸的内存块 kmalloc 内存池如何选取合适尺寸的内存块 kmalloc 内存池的整体架构 KMALLOC_RECLAIM 表示需要分配可以被回收的内存&#xff0c;RECLAIM 类型的内存页&#xff0c;不能移动&#xff0c;但是可以直接回收&#xff0c;比如文件缓存页…

【Linux】第一个Linux小程序——进度条

今天为大家带来一篇关于在Linux上编写的进度条小程序的博客。 正文 我们在日常生活中使用电子产品时&#xff0c;经常会遇到加载的过程&#xff0c;这时候这些加载界面总是会附带有一些进度条&#xff0c;这些进度条是加载进度的可视化图形&#xff0c;这篇文章我们就在Linux系…

基于云原生网关的全链路灰度实践

作者&#xff1a; 倪海峰&#xff08;海迩&#xff09; 前言 随着企业规模的不断扩大&#xff0c;传统单体应用已很难进一步支持业务的发展&#xff0c;业务的迭代速度已经难以满足业务的增长&#xff0c;此时企业会对应用系统做微服务化的改造&#xff0c;降低业务的耦合度&…

keepalived脑裂

keepalived脑裂及解决方法&#xff1f; 一.keepalived的脑裂是如何产生的&#xff1f;二、HAProxy1.HAProxy概念2.HAProxy主要特性3.HAProxy负载均衡策略 4.LVS nginx HAProxy的区别5.编译部署HAProxy 一.keepalived的脑裂是如何产生的&#xff1f; 脑裂&#xff1a;指在一个高…

Elasticsearch【优化、案例】(八)-全面详解(学习总结---从入门到深化)

目录 Elasticsearch集群_测试集群状态 Elasticsearch集群_故障应对&水平扩容 Elasticsearch优化_磁盘选择 Elasticsearch优化_分片策略 Elasticsearch优化_内存设置 Elasticsearch案例_需求说明 Elasticsearch案例_ES自动补全 Elasticsearch案例_创建索引 Elastic…

多元分类预测 | Matlab 鲸鱼算法(WOA)优化xgboost的分类预测模型,多特征输入模型,WOA-xgboost分类预测

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元分类预测 | Matlab 鲸鱼算法(WOA)优化xgboost的分类预测模型,多特征输入模型,WOA-xgboost分类预测 多特征输入单输出的二分类及多分类模型。程序内注释详细,直接替换数据就可以用。程序语言为matlab,程序可…

MySQL查询作业

一、单表查询练习 1、查询出部门编号为30的所有员工 2、所有销售员的姓名、编号和部门编号。 3、找出奖金高于工资的员工。 4、找出奖金高于工资60%的员工。 5、找出部门编号为10中所有经理&#xff0c;和部门编号为20中所有销售员的详细资料。 6、找出部门编号为10中…

【三】部署zabbix-proxy代理服务器和高可用,以及监控windows系统和java应用

zabbix代理服务器和高可用 1.部署zabbix代理服务器1.1 代理端zabbix-proxy配置1.2 客户端zabbix-agent配置1.3 zabbix-proxy总结 2. 部署Zabbix高可用集群2.1 主节点zabbix-server配置2.2 备节点zabbix-server配置2.3 客户端zabbix_agent配置2.4 Zabbix高可用集群总结 3.Zabbix…

JavaScript异步编程:(回调函数、Promise、async/await、Generator)

文章目录 前言1. 回调函数1.1. 回调函数的基本概念和使用方法1.2. 回调函数的优缺点和注意事项1.3. 回调地狱和如何避免 2. Promise2.1. Promise 的基本概念和使用方法2.2. Promise 的状态和状态转换2.3. Promise 的链式调用和错误处理2.4. Promise.all 和 Promise.race 的使用…

MySQL数据库中对表进行创建,插入数据并对数据进行选择

目录 1.根据此图进行建表并插入数据 2.对表进行以下操作 a:显示所有职工的基本信息 b:查询所有职工所属部门的部门号&#xff0c;不显示重复的部门号 c:求出所有职工的人数 d:列出最高工和最低工资 e:列出职工的平均工资和总工资 f:创建一个只有职工号、姓名和参加工作的…

123.HTML5+CSS3完结_使用Netlify收取表单

Netlify也可以做表单接受&#xff1a; 我们启动一下 修改下表单 ● 接着在我们的网站输入并提交表单 ● 之后会有一个提示&#xff0c;提示我们提交成功 然后就能在Netlify接受到用户的表单 ● 当然这个表单只能接受100个&#xff0c;但是作为实验也够用了 到此&a…