搜到这篇文章以前,相信你已对Mock Server及mock.js有必定的了解。简单归纳,Mock Server即模拟服务器,用于模拟后端api服务。mock.js是国内的高云开发的一款json数据生成器,主要用于模拟后端api数据。而justreq则是主要用于http(s)接口缓存的一款Mock Server。javascript
那么,咱们要用Mock Server解决什么呢?在前端开发过程当中,相信你们都有遇到过如下一些问题:html
后端api接口还没开发完,前端只能无尽的等待...前端
开发过程当中,接口服务器宕机了,也只能无尽的等待...java
网络奇差,一半时间都在等待接口响应了node
本身模拟数据,但部署时还得逐个去js文件清理git
逻辑太复杂,模拟数据杂乱,没法管理github
现有Mock Server或多或少都须要往项目里植入一些代码npm
并非全部接口都须要mock,后端已完成的接口但愿直接调用json
模拟的数据不够真实、不够灵活后端
只要遇到上面任何一项,那么接下来的方案或许就是你想要的。
首先,justreq就是为解决以上问题而生的,能够参看我上一篇文章《 justreq 永不离线的测试接口服务,摆脱测试接口离线之痛》,也能够去github查看最新文档。它首先解决的就是接口的缓存,定时更新机制让你开发过程当中不至于请求到过旧数据,又能不依赖网络,实现即便离线也能毫秒级响应。而后对于部分后端没开发完成的接口,能够自行mock,而且不须要往项目中植入任何代码。
而后,前两天无心中发现了mock.js这一神器,我又想到,若是把二者结合起来,那么问题8还能够解决得更优雅。幸运的是,justreq一开始的设计理念就是支持调用一切node模块,因此咱们能够很容易的把justreq和mock.js组合起来。
好了,废话完了,接下来详细说下组合方法。已火烧眉毛的话,我这里已经为你们准备好一份样例,可下载亲自运行调试。如下讲解的用到的例子也来自该样例。
https://github.com/vilien/justreq-demo/releases/download/v0.1.1/justreq-demo-v0.1.1.zip
首先下载安装Node.js,而后运行如下命令安装justreq命令行工具
npm install -g justreq-cli
进入本身项目目录运行如下命令安装justreq主程序(固然也能够专门另设目录安装,看我的喜爱)
npm install justreq
最后,安装mock.js
npm install mockjs
运行如下命令初始化justreq
justreq init
除了第一个问号The remote's hostname of you wanna proxy?
必须填入接口服务器主机名(如:192.168.50.50),其它问号一路回车使用默认便可。
初始化完成后,将在当前目录生成“.justreq”文件。如今打开它,并在rules里添加如下一条规则:
{ ... "rules": [ { "href": "getUsersList.do", "subs": "getUsersList.jrs" } ] }
稍微解释一下,这一条规则是告诉justreq:当请求地址为getUsersList.do的时候,转发至getUsersList.jrs。其它未在规则中的请求,justreq将直接代理并缓存下来,而不进行转发。
而咱们的getUsersList.jrs脚本,便是用来mock接口的。
在当前目录找到.jr目录,在里面建立并打开getUsersList.jrs(注意,.jr前面有个“.”)。编写如下代码:
// .jr/getUsersList.jrs const Mock = require('mockjs'); let data = Mock.mock({ // 属性 list 的值是一个数组,其中含有 6 到 20 个元素 'list|6-20': [{ // 属性 id 是一个自增数,起始值为 80001,每次增 6 'id|+6': 80001, 'name': '@name' }] }); end(data);
至此,咱们的第一个mock脚本就完成了。该脚本将会输出一个列表list,这个list随机产生6到20条用户记录。每条记录包含id和name两个属性,而且name也是随机自动生成的。是否是好神奇?
更多的mock.js用法可参看官方示例
至此,咱们已经完成了全部的工做,下面一块儿来体验一下吧。
首先,咱们在当前目录运行如下命令启动justreq:
justreq start
接着,咱们写一个html文件来测试下mock效果
<body> <input onclick="getUsersList()" type="button" value="Reload Users List"> <ul id="users-list"></ul> <script> function getUsersList() { $.get('http://127.0.0.1:8000/getUsersList.do', function(data){ var list = data.list || []; $('#users-list').empty(); for (var i = 0; i < list.length; i++) { $('#users-list').append('<li><a href="#" data-id="' + list[i].id + '">' + list[i].name + '</a></li>'); } }); } </script> </body>
保存为mock-demo.html,并双击打开,而后点击“Reload User List”按钮,将看到以下图的结果。
可多点几回查看效果^_^
对于大多数的前端开发状况,以上这些已经足够应付了。但也许你还会须要定制更高级、仿真度更高的模拟接口,又或许你仅仅只须要调用一些固定格式的文件等等等等。这些需求,justreq都有考虑到。你也能够把justreq共享到局域网,让其它前端小伙伴跟你一道共用一套mock脚本。甚至用justreq来作一些简单的站点服务,也是能够的。
更多高级玩法可查看justreq文档