前端开发数据mock神器 -- xl_mock
1、为什么要实现数据 mock
要理解为什么要实现数据 mock,我们可以提供几个场景来解释,
1、现在的开发很多都是前后端分离的模式,前后端的工作是不同的,当我们前端界面已经完成,但是后端的接口迟迟不能提供
前端很多时候都会等接口。
2、测试人员想要你提供一份可以直接测试,自行修改后端接口,测试 UI 的时候。
3、后端的接口,不能提供一些匹配不到的场景的时候。
这个时候如果前端可以实现自己的一套 mock 数据,这里的问题都会迎刃而解,我们可以模拟真实的接口,提供我们自己需要的数据及其数据结构。
这样,我们可以在后端未完成的情况下,完成测试,调试以及优化。
2、mock 数据的方案
说到前端开发,那么实现前端数据到 mock 是在前端构建中不可缺少到一个步骤,不管是在开发或者调试都是必不可少的。
那么我们要实现数据的 mock ,有哪些操作呢?其中最常规到方法就那么几种:
例如:
1、引入 mock.js 实现请求拦截。
2、搭建一个属于自己到 mock 服务器,模拟自己想要到数据及其数据结构。
3、搭建RAP 可视化到一个 mock 服务器
4、还有其他很多特别到手段....
在这几种方法中,都是利用了模拟数据,来实现前端的展示,提高前端开发效率以及开发节奏。
xl_mock 介绍
xl_mock 是一个基于 mock.js 开发的一个可视化的数据 mock 的 npm 包。
它可以实现在你的项目中通过命令开启一个本地数据 mock 服务器。
并且 mock 的数据类型会存在在项目中,以供合作开发。
xl_mock 使用及其预览
1、首先全局安装 xl_mock
npm install -g xl_mock
在全局安装,可以实现全局命令。
如果不在项目项目中安装,则会开启一个全局的 mock 服务器。这是不可取的。
2、在项目中添加 npm 包 xl_mock
yarn add xl_mock
在项目中添加 xl_mock ,这样开启服务的时候只会在当前项目生效。
3、在项目开启 mock 服务器
xl_mock start -p 2048
这里开启的项目的 mock 服务器,并且监听的端口好是 2048 。
如果端口号被占用,会先停止端口号的进程,然后重新开启。
首先,这里会在项目的根目录生成一个 mock 目录,用于存放数据。( 如果存在 mock 目录,则不会重新生成 )
可以看到这里开启的是一个本地服务器,并且打开了 http://127.0.0.1:2014/index.html
这里我们看到的是一个可视化,接口添加,接口修改,以及接口类型添加等。
4、添加一个接口
这里添加了一个 uesrInfo 接口
并且请求地址为 /get/userInfo
这里还可以进行方法的选择,以及接口的描述,还有接口具体信息。
当我们点击提交数据,接口的信息已经写入了本地项目目录下的 mock 文件夹内,以供提取。
5、接口验证和调用
在这里,我是直接输入接口地址到浏览器中验证接口是否生效。
那么在项目中,我们如何调用呢?
我们可以判定一个 mock 环境,将请求地址都替换成 http://127.0.0.0:2048 , 实现接口的调用。。
xl_mock 相对于其他的优点:
相对于 mock.js :
xl_mock 已经从项目中提出了,不需要进行接口请求拦截,使开发更接近于后端接口
xl_mock 提供了可视化的界面,这样接口浏览更直观
相对于一般 mock 服务器:
不需要专门搭建 mock 服务器
在这里,我们可以更方便,更简洁的完成一个 mock 功能
项目还在开发和完善之中,如果大家觉得有什么 bug 或者什么不合理的位置 ,尽情提出了,尽快优化和修改。。。
3、开发 xl_mock 知识梳理
开发一个 xl_mock npm 包需要哪些知识呢?
这里列出来了基本的几项:
1、mock.js mock.js 的基本使用方法
2、创建一个自己的 npm 包
3、node 的相关知识 主要是命令行工具
4、mock.js 的介绍
这里我会简单的介绍一下 mock.js ,具体想要了解可以浏览官网
mock.js 安装
普通直接引入:
直接在 html 中引入 <script src="http://mockjs.com/dist/mock.js"></script>;
以模块形式安装
安装:
npm install mockjs --save-dev
yarn add mockjs
mock.js 实现 mock 数据的方法:
Mock.mock(template) Mock.mock(rurl,function(options)) Mock.mock(rurl,rtype,template) Mock.mock(rurl,rtype,function(options))
template 表示数据的模版 ,Mock.mock(template) 这里,会根据模版返回数据及其数据结构
rurl mock.js 可以对请求进行拦截,这里就是要拦截的地址,拦截地址之后,根据函数或者模版返回需要的数据
rtype 这个是拦截的请求类型
function 这里的函数表示生成数据的函数,这里可以更直观
mock.js 模版的简单介绍
定义数据模版的规则:
数据模版中每一个属性由3个部分构成的:属性的名称,生成值的规则,以及属性值
'name|rule': value 属性名称|生成值的规则 : 属性值
占位符的定义:
占位符是在属性值的位置写入带有 @ 的字符串,并不会出现在最终的数据中,而是一个数据格式
格式:
@占位符
@占位符(参数 [, 参数])
例子:
{
name: '@cname',
city: '@city(true)'
}
生成的数据
{
name: '中文名称',
city: '中国城市'
}
mock.js 中的工具集
在数据模版中有占位符,对应的 Mock.Random 工具集也可以实现各种数据的生成
例如:
ar Random = Mock.Random;
Random.email() // Random 中的函数生成数据
// =>"long.xiao@qq.com"
Mock.mock('@EMAIL') // mock 函数实现生成数据
// =>"xiao.da@gil.org"
创建一个完成的模版:
{
"users|1-2": [{ // 随机生成1到2个数组元素
'name': '@cname', // 中文名称
'id|+1': 108, // 属性值自动加 1,初始值108
'birthday': '@date("yyyy-MM-dd")', // 日期
'city': '@city(true)', // 中国城市 }]
}
生成的数据:
{
users:[
{name:'xiaol',
id:1,
birthday:'2018-09-12',
city:'北京'
},
{name:'dal',
id:2,
birthday:'2014-09-12',
city:'上海'
},
]
}
这里介绍 mock.js 的基本的操作和功能。
了解 mock.js 更多介绍可以去官网上面浏览下
5、创建一个自己的 npm 包
创建一个自己的 npm 包,首先要知道如果创建
这里有一个简单例子 :如何开发一个自己的 npm 包
1、修改 package.json
{
"name": "xl_mock",
"version": "1.0.5",
"description": "用于创建 mock ,创建 mock 服务,生成mock 目录...",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
}, // 主要修改,添加 命令属性
"bin": "./bin/xl_mock.js", "author": "xiaolong",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.3",
"chalk": "^2.4.1",
"commander": "^2.17.1",
"ejs": "^2.6.1",
"express": "^4.16.3",
"express-session": "^1.15.6",
"forever": "^0.15.3",
"kp": "^1.1.2",
"mockjs": "^1.0.1-beta3",
"opn": "^5.3.0",
"shelljs": "^0.8.2",
"yargs": "^12.0.1"
}
}
添加我们的命令入口 ./bin/xl_mock.js
2、命令入口文件修改
#!/usr/bin/env node // 主要是在第一个行添加语言解析
// 这个告诉系统用 node 来解析该文件
简单介绍了 npm 开发主要两个点
如果需要更详细了解 npm 包开发。
可以浏览这个简单教程 : 如何开发一个自己的 npm 包
或者浏览官网 :npm 官网
3、Node 相关工具和知识
npm 是基于 node 开发的,所以我们必不可少的知识就是 node 的知识。
如 node 对文件的操作模块 fs , node 的进程管理 process ,子进程 child_precess
还有一些命令行工具:
chalk
chalk是一个颜色的插件。可以通过chalk.blue(‘hello world’)来改变颜色,
const chalk = require('chalk');
const log = console.log; // 改变文本在命令行中的颜色 // 这里会打印蓝色的 Hello world
log(chalk.blue('Hello world!')); // 打印蓝色的 Hello 和 红色的 !
log(chalk.blue('Hello') + 'World' + chalk.red('!'));
这个工具可以提高我们在命令操作时候的,命令行美观。
commander
commander是一个轻巧的nodejs模块,提供了用户命令行输入和参数解析强大功能。
这个工具主要是用来实现用户在命令的交互。
commander 的特性:
记录代码,生成帮助文档
合并短参数,记录参数
实现各种选项
解析命令,并保存
简单命令提示
commander 的API:
Option(): 初始化自定义参数对象,设置“关键字”和“描述”
Command(): 初始化命令行参数对象,直接获得命令行输入
Command#command(): 定义一个命令名字
Command#action(): 注册一个callback函数
Command#option(): 定义参数,需要设置“关键字”和“描述”,关键字包括“简写”和“全写”两部分,以”,”,”|”,”空格”做分隔。
Command#parse(): 解析命令行参数argv
Command#description(): 设置description值
Command#usage(): 设置usage值
案例:
program
.version(package.version)
.usage('[cmd] [options]')
.option('-p', '配置端口号')
.option('-d', '配置mock目录名称 ,默认 mock')
.option('-x', '设置密码') // 创建一个 strt 的命令
program
.command('start')
.description('开启mock服务器..')
.action((path, options) => {
start(argv)
})
program
.command('add <path>')
.description('添加 mock 数据..')
.action((path) => {
opn(`http://127.0.0.1:${port}/index.html`,{app: 'google chrome'});
})
program.parse(process.argv)
在命令行中可以执行:
xl_mock start options
这里会执行 start 命令中的相应操作
还有很多很用的命令行和node 的相关 npm 包
node 工具包 :node工具 -- NPM 包
4、项目简单介绍
代码开发和流程,这里知识简单介绍。
如果想要具体了解,可以浏览我的代码原件,后面发布 github 地址。
浏览项目介绍的时候最好对照的源码看 : 源码github
入口文件:
主要有两个功能 : 一个是 start 开启 mock 服务器,一个是添加 api 接口
开启 mock 服务器
program
.version(package.version)
.usage('[cmd] [options]')
.option('-p', '配置端口号')
.option('-d', '配置mock目录名称 ,默认 mock')
program
.command('start')
.description('开启mock服务器..')
.action((path, options) => {
start(argv) // 调用服务文件开发 服务器
})
打开浏览器添加 api 接口页面
program
.command('add <path>')
.description('添加 mock 数据..')
.action((path) => {
opn(`http://127.0.0.1:${port}/index.html`,{app: 'google chrome'});
})
开始 mock 服务器文件:
步骤:
1、将必要的模版文件复制到项目目录 mock 文件夹中
这样就不会丢失 mock 的数据
2、开发服务器,如果端口占用则杀掉端口进程,重新开启
服务器文件:
主要功能:
1、主页,用于 添加/展示 接口及其接口分类
2、添加接口分类的接口
3、获取某个分类下的接口
4、添加接口
5、获取接口信息
6、根据获取地址得倒 mock 的数据
主页代码:
这里使用的 ejs 模版引擎,将分类和默认分类下的所有接口列表展示出来
添加分类代码:
主要功能:
添加分类
1、将分类信息保存在 ./data/index.json 文件中。
2、创建一个分类 json 用于以后添加该分类下的 api 接口提供
获取分类代码:
主要功能:
1、获取 index.json 下的数据
2、获取对应分类 api json 的 api 数据列表
添加 api 接口代码:
主要功能:
1、将接口添加到对应分类到 api json 中,便于调用和 mock 数据
2、将接口信息添加到 index.json 中,在 mock 调用到时候,快速到定位 mock 模版
获取 api 数据 / 获取 mock 数据代码:
这里主要是最重要是:
将输入的数据转为 mock 数据,这里主要是 getMockData 方法。
5、xl_mock 用法
1、全局安装
npm install -g xl_mock
2、项目安装依赖
yarn add xl_mock
3、开启 mock 服务器
xl_mock start -p 3000
4、访问地址 http://127.0.0.0:3000/index.html
项目目录
代码刚刚开发完成,如若有不足或者建议请留言讨论....
博客园小结巴巴: https://www.cnblogs.com/jiebba/p/9596707.html
XiaoLong's Blog
前端开发数据mock神器 -- xl_mock的更多相关文章
- 前端开发:mock.js的简单应用(生成随机数据,拦截 Ajax 请求)
摘要 在前端开发过程中,后端接口还没有完全开发完成时,前端开发人员就需要学会自己模拟后端接口数据,更快更好的完成开发任务.模拟后端接口数据的js库有很多,今天就简单就简单的分享下mock.js在前端开 ...
- vue-cli 前端开发,后台接口跨域代理调试问题
使用 webpack的方式开发的时候,前台开发过程中需要调用很多后台的数据接口,但是通常前后台分离的开发方式,后台的接口数据很可能是不方便或者是不能在前端同学的电脑上运行的,也就出现了所谓的跨域问题. ...
- 前端开发神器Charles从入门到卸载
前言 本文将带大家学习使用前端开发神器-charles,从基本的下载安装到常见配置使用,为大家一一讲解. 一.花式夸奖Charles 截取 Http 和 Https 网络封包. 支持重发网络请求,方便 ...
- 使用 mock.js 让前端开发与后端独立
直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- mockjs学习总结(方便前端模拟数据,加快开发效率)
基本介绍: 在我们前端开发中经常遇到这样的事情,接口没有写好,只能写静态页面,如何才能用很简单的方法模拟后端数据呢?mockjs就干了这件事,而且干的还挺好. 下面是我作为初学者的一些总结经验,期 ...
- 前端开发模拟数据------webpack-api-mocker
应用场景: 在实际的项目开发过程中,一般都会进行前后端分离的开发模式,前端通过mock或者其他的插件模拟后台返回数据的功能.在常用的webpack构建工程项目中,通过和webpack-dev-serv ...
- 前后端分离之让前端开发脱离接口束缚(mock)
情景: 领导:小吴啊,最近在忙什么啊? 前吴:(心想:我擦勒,难道划水被领导发现了?也不能怪我啊,后台的哥们接口还没给呢,但要是实话实说不就对不起后台哥们了吗?) ...
- 使用Mock.js进行独立于后端的前端开发
Mockjs能做什么? 基于 数据模板 生成模拟数据. 基于 HTML模板 生成模拟数据. 拦截并模拟 ajax 请求. 能解决的问题 开发时,前后端进度不同步,后端还没完成数据输出,前端只好写静态模 ...
- 3年磨一剑,我的前端数据 mock 库 http-mock-middleware
不好意思,离开博客园4年多了,一回来就是为自己打广告,真是害羞啊... http-mock-middleware 是我最近完成的一个前端数据 mock 库.它是我汇总近3年工作经验而诞生的一个工具,使 ...
随机推荐
- Android(java)学习笔记164:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例)
1.首先我们看看下面这个需求: 这里我们在A界面上,点击这个按钮"选择要发送的短信",开启B界面上获取网络上各种短信祝福语,然后B界面会把这些网络祝福语短信发送给A界面到" ...
- eclipse生成spring boot jar包
1.右击项目,选择Run As - Maven clean 2.右击项目,选择Run As - Maven install 3.成功后 会在项目的target文件夹下生成jar包 4.将打包好的jar ...
- roi pooling层
roi pooling是先进行roi projection(即映射)然后再池化 映射是把用来训练的图片的roi映射到最后一层特征层(即卷积层).方法其实很简单,图片经过特征提取后,到最后一层卷积层时, ...
- 16.04 下修改 ssh 默认端口
打开/etc/ssh/ssh_config,在Port指令下追加新的端口设置: Port 8888 即允许通过端口 8888 进行 ssh 访问. 打开/etc/ssh/sshd_config,进行同 ...
- Java会话(session)管理
会话概述 什么是会话 简单的理解:用户打开浏览器,点击多个超链接,访问Web服务器上多个资源,然后关闭浏览器,整个过程称之为一次会话. 需要解决的问题 每个用户在使用浏览器与服务器会话的过程中,会产生 ...
- 关于Python中包裹传参和解包裹的理解
1.包裹传参 首先思考一个问题:为什么要有包裹传参?原因包括但不仅限于以下两点:①不确定参数的个数.②希望函数定义的更加松散灵活 包裹传参分两种:包裹位置传参和包裹关键字传参.先看包裹位置传参: 在这 ...
- POJ 2377 (并查集+sort求最远路)
Description Bessie has been hired to build a cheap internet network among Farmer John's N (2 <= N ...
- .NET中的缓存实现
软件开发中最常用的模式之一是缓存,这是一个简单但非常有效的概念,想法是重用操作结果,执行繁重的操作时,我们会将结果保存在缓存容器中,下次我们需要该结果时,我们将从缓存容器中取出它,而不是再次执行繁重的 ...
- intellij idea2016
注册server http://idea.imsxm.com
- 65.什么是IOC?【从零开始学Spring Boot】
[从零开始学习Spirng Boot-常见异常汇总] 这个小节吧,是无意当中看了一篇文章,觉得介绍的特别好,引用到我的博客中,让大家也乐下.那么他是怎么解说IOC的呢?看如下: 套用好莱坞的一句名言就 ...