语法规范
Mock.js 的语法规范包括两部分:
- 数据模板定义规范(DTD: Data Template Definition)
- 数据占位符定义规范(DPD: Data Placeholder Definition)
数据模板
数据模板中的每个属性由 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
- 生成规则 的含义需要依赖 属性值 的类型才能确定
- 属性值 中可以含有
@占位符 - 属性值 还指定了最终值的初始值和类型
生成规则和示例
属性值是字符串
'name|min-max': string通过重复
string生成一个字符串,重复次数大于等于min,小于等于max。jsMock.mock({ 'string|1-10': '★' })js{ "string": "★★★★★★★" }'name|count': string通过重复
string生成一个字符串,重复次数等于count。jsMock.mock({ 'string|3': '★★★' })js{ "string": "★★★★★★★★★" }
属性值是数字
'name|+1': number属性值自动加 1,初始值为
number。jsMock.mock({ 'number|+1': 202 })js{ "number": 202 }'name|min-max': number生成一个大于等于
min、小于等于max的整数,属性值number只是用来确定类型。jsMock.mock({ 'number|1-100': 100 })js{ "number": 53 }'name|min-max.dmin-dmax': number生成一个浮点数,整数部分大于等于
min、小于等于max,小数部分保留dmin到dmax位。jsMock.mock({ 'number1|1-100.1-10': 1, 'number2|123.1-10': 1, 'number3|123.3': 1, 'number4|123.10': 1.123 })js{ "number1": 12.92, "number2": 123.51, "number3": 123.777, "number4": 123.1231091814 }
属性值是布尔型
'name|1': boolean随机生成一个布尔值,值为 true 或 false 的概率均为 1/2。
jsMock.mock({ 'boolean|1': true })js{ "boolean": false }'name|min-max': value随机生成一个布尔值,值为
value的概率是min/(min+max),值为!value的概率是max/(min+max)。jsMock.mock({ 'boolean|1-2': true })js{ "boolean": true }
属性值是对象
'name|count': object从属性值
object中随机选取count个属性。jsMock.mock({ 'object|2': { 310000: '上海市', 320000: '江苏省', 330000: '浙江省', 340000: '安徽省' } })js{ "object": { "320000": "江苏省", "340000": "安徽省" } }'name|min-max': object从属性值
object中随机选取min到max个属性。jsMock.mock({ 'object|2-4': { 110000: '北京市', 120000: '天津市', 130000: '河北省', 140000: '山西省' } })js{ "object": { "110000": "北京市", "120000": "天津市", "130000": "河北省", "140000": "山西省" } }
属性值是数组
'name|1': array从属性值
arrat中随机选取 1 个元素,作为最终值。jsMock.mock({ 'array|1': ['AMD', 'CMD', 'UMD'] })js{ "array": "CMD" }'name|+1': array从属性值
arrat中按顺序选取 1 个元素,作为最终值。jsMock.mock({ 'array|+1': ['AMD', 'CMD', 'UMD'] })js{ "array": "AMD" }'name|min-max': array通过重复属性值
array生成一个新数组,重复次数大于等于min,小于等于max。jsMock.mock({ 'array|1-10': ['Mock.js'] })js{ "array": [ "Mock.js", "Mock.js", "Mock.js", "Mock.js", "Mock.js", "Mock.js", "Mock.js" ] }'name|count': array通过重复属性值
array生成一个新数组,重复次数为count。jsMock.mock({ 'array|3': ['Hello', 'Mock.js'] })js{ "array": [ "Hello", "Mock.js", "Hello", "Mock.js", "Hello", "Mock.js" ] }
属性值是函数
'name': function
执行函数 function,取其返回值最为最终的属性值,函数的上下文为属性 name 所在的对象。
Mock.mock({
foo: 'Syntax Demo',
name: function () {
return this.foo
}
}){
"foo": "Syntax Demo",
"name": "Syntax Demo"
}属性值是正则表达式
'name': regexp
根据正则表达式 regexp 反向生成可以匹配它的字符串。通常用于生成自定义格式的字符串。
Mock.mock({
regexp1: /[a-z][A-Z][0-9]/,
regexp2: /\w\W\s\S\d\D/,
regexp3: /\d{5,10}/
}){
"regexp1": "pJ7",
"regexp2": "F)\fp1G",
"regexp3": "561659409"
}数据占位符
占位符 只是在 属性值 字符串中占个位置,并不出现在最终的 属性值 中。
占位符 的格式为:
@占位符
@占位符(参数 [, 参数])注意:
- 用
@来标识其后的字符是 占位符 - 占位符 引用的是
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({
foo: 'Hello',
nested: {
a: {
b: {
c: 'Mock.js'
}
}
},
absolutePath: '@/foo @/nested/a/b/c'
}){
"foo": "Hello",
"nested": {
"a": {
"b": {
"c": "Mock.js"
}
}
},
"absolutePath": "Hello Mock.js"
}相对路径
Mock.mock({
foo: 'Hello',
nested: {
a: {
b: {
c: 'Mock.js'
}
}
},
relativePath: {
a: {
b: {
c: '@../../../foo @../../../nested/a/b/c'
}
}
}
}){
"foo": "Hello",
"nested": {
"a": {
"b": {
"c": "Mock.js"
}
}
},
"relativePath": {
"a": {
"b": {
"c": "Hello Mock.js"
}
}
}
}