http://mockjs.com/

Mock.js 是一款前端开发中拦截Ajax请求再生成随机数据响应的工具.可以用来模拟服务器响应. 优点是非常简单方便, 无侵入性, 基本覆盖常用的接口数据类型.

大概记录下使用过程, 详细使用可以参见Mock文档 Mock Wiki

安装

使用npm安装: npm install mockjs
或直接<script src="http://mockjs.com/dist/mock.js"></script>;

数据模板格式:

  1. 'name|rule': value
  2. 属性名|生成规则: 属性值

GET请求

发起get请求:

  1. $.ajax({
  2. url: 'http://test.com',
  3. type: 'get',
  4. dataType: 'json'
  5. }).done(function(data, status, xhr) {
  6. console.log(JSON.stringify(data, null, 4));
  7. });

Mock.js响应:

  1. var obj = {'aa':'11', 'bb':'22', 'cc':'33', 'dd':'44'};
  2. // Mock响应模板
  3. Mock.mock('http://test.com', {
  4. "user|1-3": [{ // 随机生成1到3个数组元素
  5. 'name': '@cname', // 中文名称
  6. 'id|+1': 88, // 属性值自动加 1,初始值为88
  7. 'age|18-28': 0, // 18至28以内随机整数, 0只是用来确定类型
  8. 'birthday': '@date("yyyy-MM-dd")', // 日期
  9. 'city': '@city(true)', // 中国城市
  10. 'color': '@color', // 16进制颜色
  11. 'isMale|1': true, // 布尔值
  12. 'isFat|1-2': true, // true的概率是1/3
  13. 'fromObj|2': obj, // 从obj对象中随机获取2个属性
  14. 'fromObj2|1-3': obj, // 从obj对象中随机获取1至3个属性
  15. 'brother|1': ['jack', 'jim'], // 随机选取 1 个元素
  16. 'sister|+1': ['jack', 'jim', 'lily'], // array中顺序选取元素作为结果
  17. 'friends|2': ['jack', 'jim'] // 重复2次属性值生成一个新数组
  18. },{
  19. 'gf': '@cname'
  20. }]
  21. });

可以看到结果:

  1. {
  2. "user": [
  3. {
  4. "name": "董静",
  5. "id": 88,
  6. "age": 25,
  7. "birthday": "2015-04-01",
  8. "city": "湖南省 怀化市",
  9. "color": "#c0f279",
  10. "isMale": false,
  11. "isFat": false,
  12. "fromObj": {
  13. "dd": "44",
  14. "aa": "11"
  15. },
  16. "fromObj2": {
  17. "bb": "22",
  18. "cc": "33"
  19. },
  20. "brother": "jack",
  21. "sister": "jack",
  22. "friends": [
  23. "jack",
  24. "jim",
  25. "jack",
  26. "jim"
  27. ]
  28. },
  29. {
  30. "gf": "田杰"
  31. }
  32. ]
  33. }

响应时也可以是使用function, 如:

  1. Mock.mock('http://test.com', 'get', function() {
  2. return Mock.mock({
  3. "user|1-3": [{
  4. 'name': '@cname',
  5. 'id': 88
  6. }
  7. ]
  8. });
  9. });

结果:

  1. {
  2. "user": [
  3. {
  4. "name": "许超",
  5. "id": 88
  6. }
  7. ]
  8. }

POST请求

发起post请求:

  1. $.ajax({
  2. url: 'http://test.com',
  3. type: 'post',
  4. dataType: 'json',
  5. data: {
  6. account: 888,
  7. pwd: 'abc123'
  8. }
  9. }).done(function(data, status, xhr) {
  10. console.log(JSON.stringify(data, null, 4));
  11. });

Mock.js响应:

  1. Mock.mock('http://test.com', function(options) {
  2. console.log(options);
  3. return Mock.mock({
  4. "user|1-3": [{
  5. 'name': '@cname',
  6. 'id|+1': 88
  7. }
  8. ]
  9. });
  10. });

可以看到结果:

  1. {url: "http://test.com", type: "POST", body: "account=888&pwd=abc123"}
  2. {
  3. "user": [
  4. {
  5. "name": "曾明",
  6. "id": 88
  7. }
  8. ]
  9. }

自定义响应时间

可以自定义设置响应时间, 可以是绝对值, 也可以是区间.

  1. // 设置4秒后再响应
  2. Mock.setup({ timeout: 4000 });
  3. // 设置1秒至4秒间响应
  4. Mock.setup({ timeout: '1000-4000' });

数据集

Mock.Random是一个工具类,用于生成各种格式随机数据. 有两种写法:

第一种:

  1. // 生成一个email格式的字符串
  2. console.log(Mock.mock('@email')); // 结果: s.uorjeqdou@crqfpdypt.gw

第二种:

  1. var Random = Mock.Random;
  2. console.log(Random.email()); // 结果: r.quyppn@yit.cv

提供的种类有:

Type Method
Basic boolean, natural, integer, float, character, string, range, date, time, datetime, now
Image image, dataImage
Color color
Text paragraph, sentence, word, title, cparagraph, csentence, cword, ctitle
Name first, last, name, cfirst, clast, cname
Web url, domain, email, ip, tld
Address area, region
Helper capitalize, upper, lower, pick, shuffle
Miscellaneous guid, id

如果上面没有你需要的种类, 还可以自定义扩展, 如下:

  1. Random.extend({
  2. weekday: function(date) {
  3. var weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
  4. return this.pick(weekdays);
  5. },
  6. sex: function(date) {
  7. var sexes = ['男', '女', '中性', '未知'];
  8. return this.pick(sexes);
  9. }
  10. });
  11. console.log(Random.weekday()); // 结果: Saturday
  12. console.log(Mock.mock('@weekday')); // 结果: 112Tuesday
  13. console.log(Random.sex()); // 结果: 男
  14. console.log(Mock.mock('@sex')); // 结果: 未知

校验

Mock.valid(template, data): 用来校验真实数据data是否与数据模板template匹配

  1. var tempObj = { "user|1-3": [{ 'name': '@cname', 'id|18-28': 88 } ]};
  2. var realData = { "user": [{ 'name': '张三', 'id': 90 } ]};
  3. console.log(Mock.valid(tempObj, realData));

JSON Schema

Mock.toJSONSchema(template): 用来把Mock.js风格的数据模板template转换成JSON Schema

  1. var tempObj = { "user|1-3": [{ 'name': '@cname', 'id|18-28': 88 } ]};
  2. console.log(Mock.toJSONSchema(tempObj));
  3.  
  4. (引用)
    https://segmentfault.com/a/1190000008839142

mock.js 劫持 ajax,模拟数据的更多相关文章

  1. 【Mock.js】前端模拟假数据,不用在手拼了

    [Mock.js]前端模拟假数据,不用在手拼了:https://www.jianshu.com/p/8579b703a4c1

  2. 微信小程序 + mock.js 实现后台模拟及调试

    一.创建小程序项目 mock.js 从 https://github.com/nuysoft/Mock/blob/refactoring/dist/mock.js 下载 api.js:配置模拟数据和后 ...

  3. 来,我们手写一个简易版的mock.js吧(模拟fetch && Ajax请求)

    预期的mock的使用方式 首先我们从使用的角度出发,思考编码过程 M1. 通过配置文件配置url和response M2. 自动检测环境为开发环境时启动Mock.js M3. mock代码能直接覆盖g ...

  4. json-server 和mock.js生成大量json数据

    JSON-server和mock.jsmock文件夹下 db.json db.jsjson-sever使用 安装:npm install json-server -g/mock 目录下执行json-s ...

  5. Vue.js——基于$.ajax实现数据的跨域增删查改

    概述 之前我们学习了Vue.js的一些基础知识,以及如何开发一个组件,然而那些示例的数据都是local的.在实际的应用中,几乎90%的数据是来源于服务端的,前端和服务端之间的数据交互一般是通过ajax ...

  6. Vue.js——基于$.ajax实现数据的跨域增删查改

    转自:https://www.cnblogs.com/keepfool/p/5648674.html 概述 之前我们学习了Vue.js的一些基础知识,以及如何开发一个组件,然而那些示例的数据都是loc ...

  7. 让前端攻城师独立于后端进行开发: Mock.js

    一.Mock.js是什么? 目前的大部分公司的项目都是采用的前后端分离, 后端接口的开发和前端人员是同时进行的. 那么这个时候就会存在一个问题, 在页面需要使用大量数据进行渲染生成前, 后端开发人员的 ...

  8. 【vue】生成接口模拟数据

    目录 方案一:自定义模拟数据 Step1 创建json文件 Step2 在 vue.config.js 中配置 Step3 在组件中使用 (方式一) Step3 封装api (方式二) Step4 在 ...

  9. 使用vue搭建应用五引入Mock.js

    为了模拟后台接口提供页面所需的数据,引入Mock.js Mock.js是一个模拟数据生成器,可帮助前端开发和原型与后端进度分开 特性: 前后端分离 增加单元测试的真实性 数据类型丰富 方便扩展 1.安 ...

随机推荐

  1. PT 转 PX

    pt (point,磅):是一个物理长度单位,指的是72分之一英寸. px (pixel,像素):是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定精度DPI(D ...

  2. Redis简单生产者消费者

    注意:redis客户端执行是单线程的,不能将客户端放在外面,内部执行使用多线程的方式. // 创建生产端连接 final Jedis jedisProducter = new Jedis(R_HOST ...

  3. FormData上传文件(不是所有的浏览器都支持)

    <h1>Ajax上传文件</h1> <div> <input type="file" id="img"/> &l ...

  4. Javascript 对象的创建和属性的判定

    1. 创建对象的方法: 直接使用new 对Object对象进行操作,即对Object 对象进行实例化 <!DOCTYPE html> <html lang="en" ...

  5. RESET MASTER和RESET SLAVE使用场景和说明,以及清除主从同步关系

    mysql主从复制中,需要将从库提升为主库,需要取消其从库角色,这可通过执行RESET SLAVE ALL清除从库的同步复制信息.包括连接信息和二进制文件名.位置.从库上执行这个命令后,使用show ...

  6. Learn English like a Baby – How to Sound Native

    Learn English like a Baby – How to Sound Native Share Tweet Share Tagged With: tips & tricks Wha ...

  7. [ SHELL编程 ] 自动删除操作系统用户

    Linux中经常需要删除用户,通常手工操作执行userdel操作即可,如果删除失败出现错误提示按照提示错误进行操作即可.如果是脚本需要调用删除用户操作呢?利用如下实例中drop_user删除用户函数, ...

  8. RxJava2.0学习笔记2 2018年7月3日 周二

    摘记: 1.map -- 转换  有些服务端的接口设计,会在返回的数据外层包裹一些额外信息,这些信息对于调试很有用,但本地显示是用不到的.使用 map() 可以把外层的格式剥掉,只留下本地会用到的核心 ...

  9. httpClient服务端编写

    以前用过HttpClient,给你说几个关键的地方吧: 1. 首先,发送的时候 HttpClient client = new HttpClient(); PostMethod method = ne ...

  10. Hibernate 再接触 一对多单向关联

    在1的方向加多的集合 Group.java package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; i ...