团队中的开发是前后端分离的,经常会步调不一致。之前前端都是将 mock 数据写死在 js 中,等后台接口写好了再把这些 mock 数据删掉,感觉很麻烦。于是研究了一下有没有什么 mock 的库,找到一个不错的Mock. 本文就是一个学习笔记。
基本使用
安装
直接把官方文档丢出来比较好: 文档
里面写的很详细就不说了。我们的项目里是采用<script>
标签加载的方式。
1 | <script src="path/to/mock.js"></script> |
基本使用
同样很简单,例如:
1 | var data = Mock.mock({ |
在这里有官方的各种示例,涵盖了所有的 mock api。
官网文档里有每个 api 的解析。
项目实践
背景
我们的项目中,前端是通过 nginx 反向代理 post 请求到具体后端应用的,然后在请求体里有一个ROUTE
的字段来决定具体的路由。 例如
1 | http://localhost:8765/MyTest/test.do |
请求体示范
1 | { |
而官网的示范中,大多数都是写死的请求 url:
1 | Mock.mock('http://g.cn', { |
我们希望有一个通用的方案,能够自动根据 nginx 路径和 prcCode 找到 mock template,这样开发人员就只用关心如何编写数据模板了。
然后继续翻阅文档查到一个 api:
1 | Mock.mock( rurl, rtype, function( options ) ) |
记录用于生成响应数据的函数。当拦截到匹配 rurl 和 rtype 的 Ajax 请求时,函数 function(options) 将被执行,并把执行结果作为响应数据返回。
options 指向本次请求的 Ajax 选项集,含有 url、type 和 body 三个属性.
看来这个函数可以很好的满足我的需求,开搞!
具体步骤
闲话不表,贴上代码:
1 | Mock.setup({ |
整个代码并不难,其中要说明的是模板文件的路径,我们需要根据 nginx path 和 route path 动态获取模板文件的位置,而且前端项目是很传统的 jquery 架构,所以解决方案是把模板文件放在项目本身的某个目录下,然后通过 XHR 去请求,这样就没有跨域问题。
模板文件
其实 mock.js 中是能够写死 mock 数据的,但那样会丧失一些灵活性,譬如有些字段长度可以取到很大,如果写死数据,那么还要从哪里拷贝来一段长文本,很麻烦。
更推荐的是使用模板+各种 mock api。 例如我们的一个模板文件:
1 | { |
某次返回的 mock 数据为:
1 | { |