mock学习(2)-数据模拟-Mockjs 和 json-server
数据模拟-Mockjs和json-server
mock和json-server都是一种模拟数据的手段,当今时代,前后端分离开发模式已经是web开发的是主流了,我们不可能等后端的接口开发完毕了,在进行前端的页面的接口测试,因此前端开发工程师们就想出了一种能够模拟数据并且截获对应接口的网络请求,返回我们模拟的数据的方法,其中最为常见的就是:mockjs,josn-server以及apiFox了,鉴于我们之前已经使用(学习)过mockjs的基本使用,那么这篇博客就直入主题了,重点讲解mock和json-server的基本使用
json-server
- 官方文档
json-server是一个在前端本地运行,可以存储json数据的server。通俗来说,就是模拟服务端接口数据,一般用在前后端分离后,前端人员可以不依赖API开发,而在本地搭建一个JSON服务,自己产生测试数据。相当于一个服务器与数据库的简易结合体。
使用步骤:
- 下载:
npm install -g json-server |
- 启动
json-server
json-server --watch db.json |
- 随后项目文件夹中会自动生成
db.json(相当于低配版的数据库)文件夹,里面就有我们初始化的模拟数据,我们可以对这些数据进行增删改查
/* -------- db.json ----------- */ |

- 修改端口号(修改为5000)
json-server --watch db.json --port 5000 |
- 我们也可以通过创建
package.json文件来创建指令脚本和管理包版本
npm init |
- 在我们创建好
db.json后,这个db.json就相当于我们临时的数据库,我们可以通过发送网络请求来对里面的数据进行增删改查(注意:json-server中内置一个字段,也就是生成的db.json中所有的数据内置一个id字段,用于指向这条数据,我们不能占用它)
代码展示:(增删改查)
操作顺序为:
- 发送
get请求获取db.json中figures中的书有数据信息 - 发送
post请求给db.json中的figures中新增{name:诸葛亮,职位:军师}的数据,id是自增的 - 发送
get请求查找db.json中figures中的id=3且name=关羽的数据 - 发送
put(覆盖修改)请求将db.json中figures中的id=4的数据,将name改为孔明,职位改为军师 - 发送
patch(按需修改)请求将db.json中figures中的id=4(孔明)的数据,将职位改为监军 - 发送
delete请求删除db.json中的figures中id=4的数据(删除孔明)
- 发送
db.json(相当于数据库)
{ |
index.html(前端页面)
|
- 结果展示:

同时json-server还支持类似数据库的语句操作和静态资源部署
数据库的语句操作:(
get请求)模糊搜索: 我们可以在url上拼接上q字段来进行模糊搜索 =>http://localhost:3000/figures?q=1, 表示搜索db.json中figures中 任意属性带1的所有数据分页搜索: 分页采用_page来设置页码,_limit来控制每页显示条数。如果没有指定_limit,默认每页显示10条 =>http://localhost:300figures?_page=1&_limit=2, 表示搜索db.json中figures中 第一页的前两条数据排序: 排序采用_sort来指定要排序的字段,_order来指定排序是正排序还是逆排序(asc | desc ,默认是asc)=>http://localhost:3000/figures?_sort=id&_order=desc, 表示根据id的倒序排序获取所有数据取局部数据:Slice采用__start来指定开始位置,__end来指定结束位置, 或者是用_limit来指定从开始位置起往后取几个数据 =>http://localhost:3000/figures?_start=0&_end=2, 表示由0开始,获取到2的数据更加细致的过滤条件:- 采用
_gte _lte来设置一个取值范围 =>http://localhost:3000/figures?id_gte=5&id_lte=9,表示获取figures中,id由5到9的数据 - 采用
_ne来设置不包含某个值 =>http://localhost:3000/figures?id_ne=1&id_ne=2&id_ne=3, 表示获取figures不包含id为1,2,3的数据 - 采用
_like来设置匹配某个字符串 =>http://localhost:3000/figures?id_like=9, 表示匹配figures中id属性为9的数据
- 采用
- 等等……..
静态资源部署
- 在项目的根目录中创建
json_sever_config.json文件
{
"port": 3000, // 端口号
"watch": true, // 开启可被监听
"static": "./public", // 部署的静态资源目录
"read-only": false, // 关闭只读模式
"no-cors": true, // 允许跨域请求
"no-gzip": false // 关闭gzip
}- 重新启动项目(加上我们刚刚配置的
json_sever_config.json文件)
json-server --watch db.json json_server_config.json
- 结果展示:
- 在项目的根目录中创建

Mockjs
在往期的博客我已经介绍过
mock的基本使用了,那么在这篇博客中我们就再一次讲解一下吧!使用
mock我们可以拦截对应的ajax接口请求,然后返回我们自己模拟的数据,这些数据可以是我们自己设置好的,也可以是使用mock模拟出来的
使用步骤:
- 安装
mock
npm i mockjs |
- 使用
mock模拟数据
/* --------- 使用mock模拟数据 ----------- */ |
- 使用
mock返回自己设置的数据(本地数据)
/* --------- 使用mock拦截请求,返回我们自己的数据 ----------- */ |
app.js中运行服务器(express)
const express = require('express') |
结果展示:
返回
mock模拟数据
返回我们自己设置的数据(本地数据)

接口拦截功能:
- 还是同一个项目,这次我们建立一个前端页面用于发送网络请求,同时在该前端页面中以
cdn的方式引入Mock并设置一个按钮,点击发送网路请求去请求上面我们自己写的mock数据(ourData)
|
- 结果展示:

Mock在vue项目中实现请求接口拦截返回模拟数据
实现步骤:
- 模拟数据:与上面的一致(
ourData,mockData) - 创建
mock拦截器(在项目根目录下创建Mock文件夹里面创建index.js)
// mock设置:拦截请求,返回我模拟的数据 |
- 在
Vue项目中的main.js中引入全局Mock拦截器
/* ------------------- Vue项目中的main.js ---------------------- */ |
- 这样以后我们在整个项目中只要发送
get网络请求的url与mock拦截器中的一致,那么这个请求都会被拦截到然后返回mock设置好的数据
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0许可协议。转载请注明来自 肥林の仓库



