mockjs 模拟文件流(mockjs)
开始
mock一个用于拦截ajax请求,并返回模拟数据的库。主要让前端独立于后端进行开发,通过 pnpm add mockjs 来进行安装
基础
初窥门径
var data = Mock.mock({ // 属性 list 的值是一个数组,其中含有 1 到 10 个元素 list|1-10: [{ // 属性 id 是一个自增数,起始值为 1,每次增 1 id|+1: 1 }] }) /* 解释一下输出一个对象,有一个list属性,属性值是一个数组,随机1-10个,数组里面存在一个对象,对象有一个属性 值id,值是1,往后的id值都自增1 大概是这样的 { list: [ { id: 1 }, { id: 2 } ] } */在项目中引入
创建一个文件夹存放mock文件,比如我们后面的例子是放在 /src/mock/index.js 文件中的,然后在main文件中导入即可,示例如下
// /src/main.js import ./mock/index // 直接导入(其实就是执行里面的代码,挂载mock),这样就可以劫持ajax请求了Mock方法
Mock.mock
根据数据模板生成模拟数据
// Mock.mock( rurl?, rtype?, template|function( options ) ) // 根据数据模板生成模拟数据 Mock.mock( template ) // 记录数据模板,当拦截到匹配 rurl 的 Ajax 请求时,将根据数据模板 template 生成模拟数据,并作为响应数据返回 Mock.mock( rurl, template ) // 当拦截到匹配 rurl 的 Ajax 请求时,函数 function(options) 将被执行,并把执行结果作为响应数据返回 Mock.mock( rurl, function( options ) ) // 当拦截到匹配 rurl 和 rtype 的 Ajax 请求时,将根据数据模板 template 生成模拟数据,并作为响应数据返回。 Mock.mock( rurl, rtype, template ) // 当拦截到匹配 rurl 和 rtype 的 Ajax 请求时,函数 function(options) 将被执行,并把执行结果作为响应数据返回。 Mock.mock( rurl, rtype, function( options ) ) /* 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 三个属性 */Mock.setup
配置拦截 Ajax 请求时的行为
Mock.setup( settings ) // 只有一个配置 自定义响应时间,如200-600毫秒 Mock.setup({ timeout: 200-600 // 300 })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.mock() 可以根据数据模板和占位符,生成数据的一个方法,下面我们会用到
数据模板定义规范
语法如下
// 数据模板中的每个属性由 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 生成规则 的 含义 需要依赖 属性值的类型 才能确定。 属性值 中可以含有 @占位符。 属性值 还指定了最终值的初始值和类型。 */ String属性值 // name|min-max: string 重复(min-max)次,范围包含min,max // 输入 { name|2-5: 哈 } //输出 { name: 哈哈哈 } // name|count: string // 输入 { name|3: 哈 } // 输出 { name|5: 哈哈哈哈哈 } // 重复count次 Number属性值 // name|+1: number 属性值自动加 1,初始值为 number // name|min-max: number 生成一个随机数,min-max范围 //name|min-max.dmin-dmax: number 除了min-max的整数,还有保留小数的位数,也能限制范围(dmin,dmax) Boolean属性值 // name|1: boolean true与false的概率是1/2 // name|min-max: value true的概率为: min/(min+max),false的概率max/(min+max) // 比如,十分之一的可能为true // name|1-9: true Object属性值 // name|count: object 随机从object中取count个属性 // 输入 { name|2: { a:a, b:b, c:c } } // 输出 { name: { b:b, c:c } } // name|min-max: object 范围选取 Array属性值 // name|1: array 数组随机选一个为最终值 // 输入 { name|1: [1,2,3] } // 输出 { name: 2 } // name|+1: array 从数组中按顺序取一个为最终值 // name|min-max: array 根据范围 来重复n次数组的数据 // name|count: array 重复n次数组的数据 // 输入 { name|2: [1,2,3] } // 输出 { name|2: [1,2,3,1,2,3] } Function属性值 // name: function // 执行函数 function,取其返回值作为最终的属性值,函数的上下文为属性 name 所在的对象。 // 输入 { name: function(){ return this.txt+"嘿" }, txt: 哟 } // 输出 { name: 哟嘿, txt: 哟 } RegExp // name: regexp 根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串 // 输入 { 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() 来扩展自定义占位符。 占位符 也可以引用 数据模板 中的属性。 占位符 会优先引用 数据模板 中的属性。 占位符 支持 相对路径 和 绝对路径。 BasicRandom.boolean 返回一随机布尔值
Random.boolean() // 50% true Random.boolean(min,max,current) // mim/(min+max) true min,max是可选的,默认1 Random.boolean(1,9,true) //10%为true // => falseRandom.natural 返回一个随机的自然数(大于等于0的整数)
Random.natural() Random.natural(min,max) // 返回一个区间数,min,max是可选的 Random.natural(10000) // => 71529071126209 Random.natural(60, 100) // => 77Random.integer 返回一个随机的整数
Random.integer() Random.integer( min ) Random.integer( min, max )Random.float 返回一个随机的整数
Random.float() Random.float( min ) Random.float( min, max ) Random.float( min, max, dmin ) Random.float( min, max, dmin, dmax )character 返回一个随机字符
Random.character() Random.character( lower/upper/number/symbol ) Random.character( pool ) // pool 字符串。表示字符池,将从中选择一个字符返回。string 返回一个随机字符串
Random.string() Random.string( length ) Random.string( pool, length ) Random.string( min, max ) Random.string( pool, min, max ) //pool 字符串。表示字符池,将从中选择一个字符返回。Random.range 返回一个整型数组
Random.range( stop ) Random.range( start, stop ) Random.range( start, stop, step ) //start //必选。 //数组中整数的起始值。 //stop //可选。 //数组中整数的结束值(不包含在返回值中)。 //step //可选。 //数组中整数之间的步长。默认值为 1。 Random.range(10) // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Random.range(3, 7) // => [3, 4, 5, 6] Random.range(1, 10, 2) // => [1, 3, 5, 7, 9] Random.range(1, 10, 3) // => [1, 4, 7] DateRandom.date 返回一个随机的日期字符串
Random.date() Random.date(format) Random.date() // => "2002-10-23" Random.date(yyyy-MM-dd) // => "1983-01-29" Random.date(yy-MM-dd) // => "79-02-14" Random.date(y-MM-dd) // => "81-05-17" Random.date(y-M-d) // => "84-6-5" // 指示生成的日期字符串的格式。默认值为 yyyy-MM-dd Format Description Example yyyy 年份的完整数字表示,4 位数字 1999 or 2003 yy 年份的两位数表示 99 or 03 y 年份的两位数表示 99 or 03 MM 月份的数字表示,带前面零 01 to 12 M 月份的数字表示,没有前面零 1 to 12 dd 一个月中的第几天,带前面零的 2 位数字 01 to 31 d 一个月中没有前面零的日子 1 to 31 HH 带前面零的小时的 24 小时格式 00 to 23 H 不带前面零的小时的 24 小时格式 0 to 23 hh 不带前面零的 12 小时格式 1 to 12 h 带前面零的小时的 12 小时格式 01 to 12 mm 分钟,带前面零 00 to 59 m 分钟,不带前面零 0 to 59 ss 秒,带前面零 00 to 59 s 秒,无前面零 0 to 59 SS 毫秒,带前面零 000 to 999 S 毫秒,无前面零 0 to 999 A 大写的 Ante meridiem 和 Post meridiem AM or PM a 小写的 Ante meridiem 和 Post meridiem am or pm T 毫秒,自 1970-1-1 00:00:00 UTC 以来 759883437303Random.time 返回一个随机的时间字符串
Random.time() Random.time( format ) // 指示生成的时间字符串的格式。默认值为 HH:mm:ssRandom.datetime 返回一个随机的日期和时间字符串
Random.datetime() Random.datetime( format ) // 指示生成的日期和时间字符串的格式。默认值为 yyyy-MM-dd HH:mm:ssRandom.now 返回当前的日期和时间字符串
Ranndom.now( unit, format ) Ranndom.now() Ranndom.now( format ) Ranndom.now( unit ) /* 表示时间单位,用于对当前日期和时间进行格式化。可选值有:year、month、week、day、hour、minute、second、week,默认不会格式化。 Random.now() // => "2014-04-29 20:08:38 " Random.now(day, yyyy-MM-dd HH:mm:ss SS) // => "2014-04-29 00:00:00 000" Random.now(day) // => "2014-04-29 00:00:00 " Random.now(yyyy-MM-dd HH:mm:ss SS) // => "2014-04-29 20:08:38 157" Random.now(year) // => "2014-01-01 00:00:00" Random.now(month) // => "2014-04-01 00:00:00" Random.now(week) // => "2014-04-27 00:00:00" Random.now(day) // => "2014-04-29 00:00:00" Random.now(hour) // => "2014-04-29 20:00:00" Random.now(minute) // => "2014-04-29 20:08:00" Random.now(second) // => "2014-04-29 20:08:38" */ ImageRandom.image 生成一个随机的图片地址
Random.image() Random.image( size ) Random.image( size, background ) Random.image( size, background, text ) Random.image( size, background, foreground, text ) Random.image( size, background, foreground, format, text ) // size 可选 宽x高 比如 300*400,400*500 // background 可选 指示图片的背景色。默认值为 #000000 // foreground 可选 指示图片的前景色(文字)。默认值为 #FFFFFF // format 可选 指示图片的格式。默认值为 png,可选值包括:png、gif、jpg // text 可选 指示图片上的文字。默认值为参数 size Random.image() // => "https://cdn.yuucn.cn/wp-content/uploads/2023/05/1684269119-969d695973a7f23.png&text=!"Random.dataImage 生成一段随机的 Base64 图片编码
Random.dataImage() Random.dataImage( size ) Random.dataImage( size, text ) // size 可选,指示图片的宽高,格式为 宽x高。默认从下面的数组中随机读取一个 /* [ 300x250, 250x250, 240x400, 336x280, 180x150, 720x300, 468x60, 234x60, 88x31, 120x90, 120x60, 120x240, 125x125, 728x90, 160x600, 120x600, 300x600 ] */ // text 可选 指示图片上的文字。默认值为参数 size ColorRandom.color 随机生成一个有吸引力的颜色,格式为 #RRGGBB
Random.hex 随机生成一个有吸引力的颜色,格式为 #RRGGBB
Random.rgb 随机生成一个有吸引力的颜色,格式为 rgb(r, g, b)
Random.rgba 随机生成一个有吸引力的颜色,格式为 rgba(r, g, b, a)
Random.hsl 随机生成一个有吸引力的颜色,格式为 hsl(h, s, l)
TextRandom.paragraph 随机生成一段文本
Random.paragraph() Random.paragraph( len ) Random.paragraph( min, max ) /* len 可选。指示文本中句子的个数。默认值为 3 到 7 之间的随机数。 min 可选。指示文本中句子的最小个数。默认值为 3。 max 可选。指示文本中句子的最大个数。默认值为 7。 */Random.cparagraph 随机生成一段中文文本
Random.cparagraph() Random.cparagraph( len ) Random.cparagraph( min, max )Random.sentence 随机生成一个句子,第一个单词的首字母大写
Random.sentence() Random.sentence( len ) Random.sentence( min, max ) /* len 可选。指示句子中单词的个数。默认值为 12 到 18 之间的随机数。 min 可选。指示句子中单词的最小个数。默认值为 12。 max 可选。指示句子中单词的最大个数。默认值为 18。 */Random.csentence 随机生成一段中文文本
Random.csentence() Random.csentence( len ) Random.csentence( min, max )Random.word 随机生成一个单词
Random.word() Random.word( len ) Random.word( min, max ) /* len 可选。指示单词中字符的个数。默认值为 3 到 10 之间的随机数。 min 可选。指示单词中字符的最小个数。默认值为 3。 max 可选。指示单词中字符的最大个数。默认值为 10。 */Random.cword 随机生成一个汉字
Random.cword() Random.cword( pool ) Random.cword( length ) Random.cword( pool, length ) Random.cword( min, max ) Random.cword( pool, min, max ) /* pool 可选。汉字字符串。表示汉字字符池,将从中选择一个汉字字符返回。 min 可选。随机汉字字符串的最小长度。默认值为 1。 max 可选。随机汉字字符串的最大长度。默认值为 1。 */Random.title 随机生成一句标题,其中每个单词的首字母大写
Random.title() Random.title( len ) Random.title( min, max ) /* len 可选。指示单词中字符的个数。默认值为 3 到 7 之间的随机数。 min 可选。指示单词中字符的最小个数。默认值为 3。 max 可选。指示单词中字符的最大个数。默认值为 7。 */Random.ctitle 随机生成一句中文标题
Random.ctitle() Random.ctitle( len ) Random.ctitle( min, max ) /* len 可选。指示单词中字符的个数。默认值为 3 到 7 之间的随机数。 min 可选。指示单词中字符的最小个数。默认值为 3。 max 可选。指示单词中字符的最大个数。默认值为 7。 */ NameRandom.first 随机生成一个常见的英文名
Random.last 随机生成一个常见的英文姓
Random.name 随机生成一个常见的英文姓名
Random.name() // => "Larry Wilson" Random.name(true) // => "Helen Carol Martinez" // middle 可选。布尔值。指示是否生成中间名Random.cfirst 随机生成一个常见的中文名
Random.clast 随机生成一个常见的中文姓
Random.cname 随机生成一个常见的中文姓名
WebRandom.url 随机生成一个 URL
Random.url() Random.url( protocol, host ) // protocol 指定 URL 协议。例如 http。 // host 指定 URL 域名和端口号。例如 nuysoft.com。Random.protocol 随机生成一个 URL 协议。返回以下值之一
http、ftp、gopher、mailto、mid、cid、news、nntp、prospero、telnet、rlogin、tn3270、waisRandom.domain 随机生成一个域名
Random.tld 随机生成一个顶级域名
Random.email 随机生成一个邮件地址
Random.email() Random.email( domain ) // domain 指定邮件地址的域名。例如 nuysoft.comRandom.ip 随机生成一个 IP 地址
AddressRandom.region 随机生成一个(中国)大区
Random.province 随机生成一个(中国)省(或直辖市、自治区、特别行政区)
Random.city 随机生成一个(中国)市
Random.city() Random.city( prefix ) /* prefix 可选。布尔值。指示是否生成所属的省 */Random.county 随机生成一个(中国)县
Random.county() Random.county( prefix ) /* prefix 可选。布尔值。指示是否生成所属的省、市。 */Random.zip 随机生成一个邮政编码(六位数字)
HelperRandom.capitalize 把字符串的第一个字母转换为大写
Random.upper 把字符串转换为大写
Random.lower 把字符串转换为小写
Random.pick 从数组中随机选取一个元素,并返回
Random.shuffle 打乱数组中元素的顺序,并返回
MiscellaneousRandom.guid 随机生成一个 GUID
Random.id 随机生成一个 18 位身份证
Random.increment 生成一个全局的自增整数
Random.increment() Random.increment( step ) /* step 可选。整数自增的步长。默认值为 1 */扩展
Mock.valid 校验真实数据 data 是否与数据模板 template 匹配
Mock.valid( template, data ) /* 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.namevalue is equal to value1, but is value2" } ]Mock.toJSONSchema 把 Mock.js 风格的数据模板 template 转换成 JSON Schema
Mock.toJSONSchema( template ) /* 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": [] }] }] }创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!