Mockjs-官网学习总结
安装:
Node (CommonJS)
# 安装
npm install mockjs
// 使用 Mock
var Mock = require('mockjs')
var data = Mock.mock({// 属性 list 的值是一个数组,其中含有 1 到 10 个元素'list|1-10': [{// 属性 id 是一个自增数,起始值为 1,每次增 1'id|+1': 1}]
})
// 输出结果
console.log(JSON.stringify(data, null, 4))
语法规范:
Mock.js 的语法规范包括两部分:
- 数据模板定义规范(Data Template Definition,DTD)
- 数据占位符定义规范(Data Placeholder Definition,DPD)
数据模板定义:
数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:
// 属性名 name
// 生成规则 rule
// 属性值 value
'name|rule': value
注意:
- 属性名 和 生成规则 之间用竖线
|
分隔。 - 生成规则 是可选的。
- 生成规则 有 7 种格式:
'name|min-max': value
'name|count': value
'name|min-max.dmin-dmax': value
'name|min-max.dcount': value
'name|count.dmin-dmax': value
'name|count.dcount': value
'name|+step': value
- 生成规则 的含义需要依赖属性值的类型 才能确定。
- 属性值 中可以含有
@占位符
。 - 属性值 还指定了最终值的初始值和类型。
数据占位符定义规范 DPD :
占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。
占位符 的格式为:
@占位符
@占位符(参数 [, 参数])
注意:
- 用
@
来标识其后的字符串是 占位符。 - 占位符 引用的是
Mock.Random
中的方法。 - 通过
Mock.Random.extend()
来扩展自定义占位符。 - 占位符 也可以引用 数据模板 中的属性。
- 占位符 会优先引用 数据模板 中的属性。
- 占位符 支持 相对路径 和 绝对路径。
Mock.mock({name: {first: '@FIRST',middle: '@FIRST',last: '@LAST',full: '@first @middle @last'}
})
// =>
{"name": {"first": "Charles","middle": "Brenda","last": "Lopez","full": "Charles Brenda Lopez"}
}
Mock.mock( rurl?, rtype?, template|function( options ) ):
根据数据模板生成模拟数据。
Mock.mock( template )
根据数据模板生成模拟数据。
JSFiddle
Mock.mock( rurl, template )
记录数据模板。当拦截到匹配 rurl
的 Ajax 请求时,将根据数据模板 template
生成模拟数据,并作为响应数据返回。
JSFiddle
Mock.mock( rurl, function( options ) )
记录用于生成响应数据的函数。当拦截到匹配 rurl
的 Ajax 请求时,函数 function(options)
将被执行,并把执行结果作为响应数据返回。
JSFiddle
Mock.mock( rurl, rtype, template )
记录数据模板。当拦截到匹配 rurl
和 rtype
的 Ajax 请求时,将根据数据模板 template
生成模拟数据,并作为响应数据返回。
JSFiddle
Mock.mock( rurl, rtype, function( options ) )
记录用于生成响应数据的函数。当拦截到匹配 rurl
和 rtype
的 Ajax 请求时,函数 function(options)
将被执行,并把执行结果作为响应数据返回。
JSFiddle
rurl
可选。
表示需要拦截的 URL,可以是 URL 字符串或 URL 正则。例如 /\/domain\/list\.json/
、'/domian/list.json'
。
rtype
可选。
表示需要拦截的 Ajax 请求类型。例如 GET
、POST
、PUT
、DELETE
等。
template
可选。
表示数据模板,可以是对象或字符串。例如 { 'data|1-10':[{}] }
、'@EMAIL'
。
function(options)
可选。
表示用于生成响应数据的函数。
options
指向本次请求的 Ajax 选项集,含有 url
、type
和 body
三个属性,参见 XMLHttpRequest 规范。
PS:从 1.0 开始,Mock.js 通过覆盖和模拟原生 XMLHttpRequest 的行为来拦截 Ajax 请求,不再依赖于第三方 Ajax 工具库(例如 jQuery、Zepto 等)。
Mock.setup( settings ):
- Mock.setup( settings )
配置拦截 Ajax 请求时的行为。支持的配置项有:timeout
。
settings
必选。
配置项集合。
timeout
可选。
指定被拦截的 Ajax 请求的响应时间,单位是毫秒。值可以是正整数,例如 400
,表示 400 毫秒 后才会返回响应内容;也可以是横杠 '-'
风格的字符串,例如 '200-600'
,表示响应时间介于 200 和 600 毫秒之间。默认值是'10-100'
。
Mock.setup({timeout: 400
})
Mock.setup({timeout: '200-600'
})
PS:目前,接口 Mock.setup( settings )
仅用于配置 Ajax 请求,将来可能用于配置 Mock 的其他行为。
Mock.Random:
Mock.Random 是一个工具类,用于生成各种随机数据。
Mock.Random 的方法在数据模板中称为『占位符』,书写格式为 @占位符(参数 [, 参数])
。
var Random = Mock.Random
Random.email()
// => "n.clark@miller.io"
Mock.mock('@email')
// => "y.lee@lewis.org"
Mock.mock( { email: '@email' } )
// => { email: "v.lewis@hall.gov" }
扩展
Mock.Random 中的方法与数据模板的 @占位符
一一对应,在需要时还可以为 Mock.Random 扩展方法,然后在数据模板中通过 @扩展方法
引用。例如:
Random.extend({constellation: function(date) {var constellations = ['白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座']return this.pick(constellations)}
})
Random.constellation()
// => "水瓶座"
Mock.mock('@CONSTELLATION')
// => "天蝎座"
Mock.mock({constellation: '@CONSTELLATION'
})
// => { constellation: "射手座" }
Mock.valid( template, data ):
- Mock.valid( template, data )
校验真实数据 data
是否与数据模板 template
匹配。
template
必选。
表示数据模板,可以是对象或字符串。例如 { 'list|1-10':[{}] }
、'@EMAIL'
。
data
必选。
表示真实数据。
var template = {name: 'value1'
}
var data = {name: 'value2'
}
Mock.valid(template, data)
// =>
[{"path": ["data","name"],"type": "value","actual": "value2","expected": "value1","action": "equal to","message": "[VALUE] Expect ROOT.name'value is equal to value1, but is value2"}
]
Mock.toJSONSchema( template ):
- Mock.toJSONSchema( template )
把 Mock.js 风格的数据模板 template
转换成 JSON Schema。
template
必选。
表示数据模板,可以是对象或字符串。例如 { 'list|1-10':[{}] }
、'@EMAIL'
。
var template = {'key|1-10': '★'
}
Mock.toJSONSchema(template)
// =>
{"name": undefined,"path": ["ROOT"],"type": "object","template": {"key|1-10": "★"},"rule": {},"properties": [{"name": "key","path": ["ROOT","key"],"type": "string","template": "★","rule": {"parameters": ["key|1-10", "key", null, "1-10", null],"range": ["1-10", "1", "10"],"min": 1,"max": 10,"count": 3,"decimal": undefined,"dmin": undefined,"dmax": undefined,"dcount": undefined}}]
}
var template = {'list|1-10': [{}]
}
Mock.toJSONSchema(template)
// =>
{"name": undefined,"path": ["ROOT"],"type": "object","template": {"list|1-10": [{}]},"rule": {},"properties": [{"name": "list","path": ["ROOT", "list"],"type": "array","template": [{}],"rule": {"parameters": ["list|1-10", "list", null, "1-10", null],"range": ["1-10", "1", "10"],"min": 1,"max": 10,"count": 6,"decimal": undefined,"dmin": undefined,"dmax": undefined,"dcount": undefined},"items": [{"name": 0,"path": ["data", "list", 0],"type": "object","template": {},"rule": {},"properties": []}]}]
}
Mockjs-官网学习总结相关推荐
- PCL官网学习OpenNI Grabber 调用奥比中光Astra s 遇到问题openni2_grabber.cpp @ 325 : No devices connected.
PCL官网学习OpenNI Grabber 调用奥比中光Astra s 遇到问题openni2_grabber.cpp @ 325 : No devices connected. 问题描述 termi ...
- Spring AOP官网学习
Spring AOP官网学习 5.1 AOP概念 让我们从定义一些核心的AOP概念和术语开始.这些术语并不是spring特有的.不幸的是,AOP术语不是特别直观. 1.Aspect(方面):跨多个类的 ...
- postgresql 官网学习文档
pg数据官网学习文档,PostgreSQL: Documentation 中文版:文档目录/Document Index: 世界上功能最强大的开源数据库...
- Spring官网学习(一)概述
文章目录 1.Spring官网简介 2.Spring总览 2.1.什么是Spring 2.2.Spring的发展历程 3.Spring的设计理念 3.1.Spring的优点 4.IOC和AOP浅析 4 ...
- Angular官网学习笔记
Angular官网学习笔记 一.Angular概述 **什么是Angular:**一个基于TypeScript构建的开发平台包括: 一个基于组件的框架,用于构建可伸缩的Web应用 一组完美集成的库,涵 ...
- knockout+html绑定,Knockout.Js官网学习(style绑定、attr绑定)
Style绑定 style绑定是添加或删除一个或多个DOM元素上的style值.比如当数字变成负数时高亮显示,或者根据数字显示对应宽度的Bar.(注:如果你不是应用style值而是应用CSS clas ...
- 如何学习一个新的计算机概念(协议等),如snmp? 上官网学习【官网集合】
snmp学习,不要仅仅只在百度上翻阅.要养成习惯,去snmp的官网,读英文官方文档.这里会有一手的教程.源代码.命令行. Qt官网:https://www.qt.io .https://doc.qt. ...
- Vue 官网学习笔记
VUE介绍 vue git 地址:https://github.com/vuejs/vue/projects Vue 官网教程地址:https://cn.vuejs.org/v2/guide/inst ...
- Vue官网学习(模板语法:一、{{}}双大括号语法)
Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析 ...
- 【PostgreSQL】官网学习使用 PL/pgSQL编写造数据脚本
文章目录 1. 前言 2. 成果 3. 创建与使用类似 Java map 的数据结构 3.1 声明数组 3.2 数组赋值 3.3 数组遍历 4. 如何打印调试信息 (可以用来生成回滚语句) 5. 后记 ...
最新文章
- Dubbo下载-从missing artifactId说起
- 浅谈移动端中的视口(viewport)
- 如何理解《瓦尔登湖》?
- python整数浮点数复数类型判断函数_Python数值类型(整形、浮点型和复数)及其用法讲解...
- wx-jq:一套完全原创的微信小程序插件集合库
- python课设带报告_python实时投票系统的课设报告
- mysql语句怎么拼接字符串_MySQL执行拼接字符串语句实例
- 2、ARM嵌入式系统:LED初始化
- 相亲也内卷?被程序员的相亲规划整不会了......
- 搜狗站群排名优化之搜狗批量推送工具
- unix网络编程中的fd是什么
- mac快捷键:轻松提升mac使用效率
- 免费比对工具DiffMerge
- 皮尔逊相关性系数和热力图
- chmod命令用法(linux中chmod命令用法)
- 汪子嵩:论有、存在与是(如是——真如)
- 招聘季如何面试软件测试岗位?超全面试题分享
- 对话系统论文集(1)-BBQ网络
- 华为路由器与交换机的基础命令
- Forter在Frost Sullivan的2020 Radar报告中被评为电子商务的防欺诈领导者
热门文章
- Abaqus6.14+VS2013+IVF2013安装教程
- Python自动化操作Excel绘制条形图!
- 单片机数据上传到阿里云物联网平台后,如何在手机端和网页端获取获取数据?
- OKK集中生产加工中心(MC)的主要部品
- Word排版计算机类科研论文的格式保证
- 英伟达3090Ti旗舰显卡,21Gbps速率,450W功耗和新接口
- 民办教育未来10年的发展趋势
- LPMS-CU2 IMU在 Nvidia Xavier安装配置
- qt android 浮动窗口,QT+ 状态栏+核心控件+浮动窗口
- 华为将安卓系统迁移到鸿蒙OS,真·国产之光!华为鸿蒙OS发布,从安卓迁移只需要2天...