今天和各位一起学习一下mock,文章中若有出入之处,还望不吝指教…

初识mockjs

1、什么是mockjs?

生成随机数据,拦截 Ajax 请求(moockjs官网)
通过随机数据,模拟各种场景;不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据;支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等;支持支持扩展更多数据类型,支持自定义函数和正则。

mockjs有那些优点

  • 前后端分离:让前端攻城师独立于后端进行开发。
  • 增加单元测试的真实性:通过随机数据,模拟各种场景。
  • 开发无侵入:不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。
  • 用法简单:符合直觉的接口。
  • 数据类型丰富:支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
  • 方便扩展:支持支持扩展更多数据类型,支持自定义函数和正则。

mockjs的两个种要特性

众所周知Mock.js因为两个重要的特性风靡前端:

  • 数据类型丰富
    支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
  • 拦截 Ajax 请求
    不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。安全又便捷

文章会用到的API(也是Mock经常使用的API):

  • Mock.mock(url, type, data)
参数名 参数需求 参数描述 例子
url 可选: URL 字符串或 URL 正则 拦截请求的地址 /mock
type 可选 拦截Ajax类型 GET、POST
template 可选: 可以是对象或字符串 生成数据的模板 {'data 1-10’:[‘mock’] }、’@EMAIL’

template可能有点难理解,我们试几个例子就一目了然了!

//类型1: 名字|规则: 内容
Mock.mock({'data|1-4': '哑巴'})
//生成1-4个哑巴字符串
{data: "哑巴哑巴哑巴"
}
//类型2: Mock自带模板
Mock.mock('@province')
//随机生成一个省份
"上海"
下面就简单的说说mockjs的基本用法

不同情况,使用mockjs的方式也可能不一样

  • 直接使用
    1、 直接在需要Mock数据的js文件使用
    2、 创建一个js/json文件,导入使用
  • 搭配node使用
    1、通过node开启Mock服务, 可加入到package.json命令里
两者区别
  • 直接创建的Mockjs数据, 控制台的NETWORK无法看到.
  • 服务开启的Mockjs数据,控制台可以看得到拦截
  • 对于要上线的项目, 直接创建(导入)Mock数据还会导致一个大的麻烦!当开始调用真正后端接口的时候, 不得不删除创建的数据(即使你统一在一个文件创建,但也要一个个注释掉导入的地方)
  • node服务,就避免了这个问题了。因为你需要用Mock数据的时候,只需要开启它的服务,而不需要导入

两种方式使用如下
node:npm安装:npm install mockjs;
直接使用: <script src=“http://mockjs.com/dist/mock.js”>

使用方式

基本语法

Mock.mock(‘地址’,{ “dataname|rule”:{“对应的值”} })
说明:地址就是我们通过ajax获取数据时候填写的地址,这里填写的地址可以自定义,第二个参数是我们要模拟的数据,以及相应的规则。

语法规则

官网实例
Mock.mock('https://www.test.com',{"userInfo|4":[{    //生成|num个如下格式名字的数据"id|+1":1,   //数字从当前数开始后续依次加一"name":"@cname",    //名字为随机中文名字"ago|18-28":25,     //年龄为18-28之间的随机数字"sex|1":["男","女"],    //性别是数组中的一个,随机的"job|1":["web","UI","python","php"]    //工作是数组中的一个}]})

最后通过ajax接收数据,形式如下:

    //ajax接收数据,通过jq$.get('https://www.test.com',function(data){console.log(JSON.parse(data));})

注意:
对于通过Random属性而来的一些随机数据-比如随机生成图片,使用方式如下:

Mock.mock('http://www.test.com',{"ListInfo|5":[{"img":Mock.Random.image('200x100')//图片数据随机生成,大小指定为200X100}]
});

官网实例

数据模板定义规范

数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:

属性名 name
生成规则 rule
属性值 value
‘name|rule’: value

生成规则和示例:

  1. 属性值是字符串 String
  • 通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max。
    ‘name|min-max’: string
  • 通过重复 string 生成一个字符串,重复次数等于 count。
    ‘name|count’: string
  1. 属性值是数字 Number
  • 属性值自动加 1,初始值为 number。
    ‘name|+1’: number
  • 生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型。
    ‘name|min-max’: number
  • 生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmin 到 dmax 位。
    ‘name|min-max.dmin-dmax’: number
    例如:
Mock.mock({'number1|1-100.1-10': 1,'number2|123.1-10': 1,'number3|123.3': 1,'number4|123.10': 1.123
})
//result =>
{"number1": 12.92,"number2": 123.51,"number3": 123.777,"number4": 123.1231091814
}

3.属性值是布尔型 Boolean

  • 随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2。
    ‘name|1’: boolean
  • 随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)。
    ‘name|min-max’: value
    4.属性值是对象 Object
  • 从属性值 object 中随机选取 count 个属性。
    ‘name|count’: object
  • 从属性值 object 中随机选取 min 到 max 个属性。
    ‘name|min-max’: object
    5.属性值是数组 Array
  • 从属性值 array 中随机选取 1 个元素,作为最终值。
    ‘name|1’: array
  • 从属性值 array 中顺序选取 1 个元素,作为最终值。
    ‘name|+1’: array
  • 通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。
    ‘name|min-max’: array
  • 通过重复属性值 array 生成一个新数组,重复次数为 count。
    ‘name|count’: array
    6.属性值是函数 Function
  • 执行函数 function,取其返回值作为最终的属性值,函数的上下文为属性 ‘name’ 所在的对象。
    ‘name’: function
    7.** 属性值是正则表达式 RegExp**
    ‘name’: regexp
    根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串。
Mock.mock({'regexp1': /[a-z][A-Z][0-9]/,'regexp2': /\w\W\s\S\d\D/,'regexp3': /\d{5,10}/
})
//result =>
{"regexp1": "pJ7","regexp2": "F)\fp1G","regexp3": "561659409"
}

数据占位符定义规范
占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。
占位符 的格式为:

@占位符
@占位符(参数 [, 参数])

  • 用 @ 来标识其后的字符串是 占位符。
  • 占位符 引用的是 Mock.Random 中的方法。
  • 通过 Mock.Random.extend() 来扩展自定义占位符。
  • 占位符 也可以引用 数据模板 中的属性。
  • 占位符 会优先引用 数据模板 中的属性。
  • 占位符 支持 相对路径 和 绝对路径。
Mock.mock({'avatar':'@image(100x100)','name': {'first': '@FIRST','middle': '@FIRST','last': '@LAST','full': '@first @middle @last','cname': '@cname',},'city': '@city(true)','birthday': '@date("yyyy-MM-dd")  @time()''luckColor' : '@color','about':'@paragraph( 20, 50 )'
})
//result =>
{"avatar":"http://dummyimage.com/100x100""name": {"first": "Charles","middle": "Brenda","last": "Lopez","full": "Charles Brenda Lopez","cname": "郝刚",},"city": "香港特别行政区 九龙","birthday": "1996-10-14 20:38:38""luckColor" : "#87f279","about":"Esc jkcfm qykqdod ocskv vnnntrvdf gvjv ykrquyh gudefpbf bfx pduggbhpo drrmgb eulxjcxau xvzw."
}

Mock.Random

Mock.Random 是一个工具类,用于生成各种随机数据。
Mock.Random 的方法在数据模板中称为『占位符』,书写格式为 @占位符(参数 [, 参数]) 。
方法:

类型 方法
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

说明:Mock.Random 中的方法与数据模板的 @占位符 一一对应,在需要时还可以为 Mock.Random 扩展方法,然后在数据模板中通过 @扩展方法 引用。例如:

Random.extend({constellation: function(date) {var constellations = ['白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座']return this.pick(constellations)},weekday: function(date) {var weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];return this.pick(weekdays);},sex: function(date) {var sexes = ['男', '女', '中性', '未知'];return this.pick(sexes);}
})
Random.constellation()
// => "水瓶座"
Mock.mock('@constellation')
//result  => "天蝎座"
Mock.mock({constellation: '@constellation'
})
//result  => { constellation: "射手座" }Random.weekday()
//result  => "Saturday"
Mock.mock('@weekday')
//result  => "Saturday"
Mock.mock({weekday: '@weekday'
})
//result  => { weekday: "Saturday" }Random.sex()
//result => "男"
Mock.mock('@sex')
//result  => "男"
Mock.mock({sex: '@sex'
})
//result  => { sex: "男" }

关于mockjs的入门就先说这些,如果有了解mockjs和vue(有时间在更新reactjs和angularjs的)的同胞们,请移步至楼主另外一篇文章:vue+mockjs 模拟数据,实现前后端分离

MockJS学习的初识姿势相关推荐

  1. Nancy in .Net Core学习笔记 - 初识Nancy

    原文:Nancy in .Net Core学习笔记 - 初识Nancy 前言 去年11月份参加了青岛MVP线下活动,会上老MVP衣明志介绍了Nancy, 一直没有系统的学习一下,最近正好有空,就结合. ...

  2. 怎么用linux的HDD存储,Linux学习的正确姿势12:Linux存储概览

    原标题:Linux学习的正确姿势12:Linux存储概览 从工作原理区分 机械 HDD 固态 SSD SSD的优势 SSD是摒弃传统磁介质,采用电子存储介质进行数据存储和读取的一种技术,突破了传统机械 ...

  3. Nacos学习之初识Nacos

    Nacos学习之初识Nacos 在分布式项目中既然存在Eureka这个注册中心,那么Nacos有充当什么角色?Nacos到底是个啥?他又是咋么下载安装的?本文我会将从什么是Nacos.Nacos与其他 ...

  4. Esp8266进阶之路14 esp8266的 FreeRtos系统学习的正确姿势,环境配置环境、烧录。(附带demo)

    本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...

  5. PE病毒学习笔记——初识感染技术 (转自看雪学院)

    [分享]PE病毒学习笔记--初识感染技术 <script type="text/javascript"></script>   标 题: [分享]PE病毒学 ...

  6. 前端学习(初识HTML 上)——基础知识和基本标签

    前端学习之初识HTML 一.HTML基础知识 1.html定义 2.html特点 3.html标签 4.html基础结构 (1)<head></head>中的<meta& ...

  7. python面向对象学习_Python 初识面向对象#学习猿地

    > 面向对象编程--Object Oriented Programming,简称`OOP`,是一种**以对象为中心**的程序设计思想. > > 面向过程编程--Procedure O ...

  8. 使用 PoseNet 和实时深度学习项目进行姿势检测

    介绍 深度学习是机器学习和人工智能的一个子集,它模仿人类获取某些类型知识的方式.它本质上是一个具有三层或更多层的神经网络.深度学习有助于解决许多人工智能应用程序,这些应用程序有助于提高自动化程度,在无 ...

  9. mysql学习总结-初识+数据管理+增删改查+常用函数+事务理解+数据库设计+JDBC引入

    1.初识MySQL 1.1数据库的定义 数据库(DataBase,简称DB),是一个按数据结构来存储和管理数据的计算机软件系统.每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制 ...

最新文章

  1. 其他算法-PCA主成分分析
  2. Linux 驱动 Printk 在终端没有输出
  3. uboot启动流程概述_关于RISCV启动部分的思考~
  4. sqlite随机读取N条记录
  5. Feign深入学习(二)
  6. C# windows定时服务+服务邮箱发送
  7. 动态规划-背包是否装满
  8. python入坑指南_Rust入坑指南:万物初始
  9. servlet串行拦截器实现例子
  10. audio标签的controls属性_HTML5 新增标签和属性
  11. 使用appium时出现的问题
  12. Liunx 常用命令 学习备份
  13. 爆!看过这么多教程吗?不管你看没看过,我反正是没看过!
  14. PB入门:基础语法与操作
  15. xul转换html,ExportHTMLFolderMod.uc.xul
  16. MTK G-sensor 1
  17. Python 史上最全第三方库收集(第二弹)
  18. 镁光闪存颗粒对照表_最全的内存颗粒编码规则说明,教你看穿内存条到底用的什么颗粒...
  19. c语言 中文转拼音,汉字转换拼音解决思路
  20. 中国参与MOOC 建设的大学有多少所?

热门文章

  1. SQLSTATE[HY000] [1203] User xxx already has more than 'max_user_connections' active co
  2. 【读论文】唐建LINE那篇论文:LINE: Large-scale Information Network Embedding
  3. JavaScript之数组相关方法以及应用
  4. 记人生第一次差点没被zxy吊打
  5. 线程池源代码详解,参数详解
  6. 深入浅出新一代云网络——VPC中的那些功能与基于OpenStack Neutron的实现(三)-路由与隧道...
  7. 为什么以太网有最短帧长度的要求_车载以太网系统——双绞线总结(原创)
  8. 模拟器和服务器共享文件夹,天天模拟器中共享文件夹以及导入文件怎么操作?共享文件夹和导入文件流程一览...
  9. 易格售后服务管理系统 v2.0 单机版 绿色
  10. 874复习第十一天-写入文件