当前位置: 首页 > 科技观察

玩转Mockjs,前端也能流畅运行

时间:2023-03-18 23:44:01 科技观察

mockjs用于生成随机模拟数据,拦截ajax请求,对数据进行增删改查。在生成数据的时候,我们需要能够熟练的使用mock.js的语法。Mockjs的语法规范包括两部分:数据模板定义规范和数据占位符定义规范。1.数据模板定义规范数据模板中的每个属性由:属性名、生成规则、属性值组成。使用语法为:"name|rule":value值得注意的是:使用|分隔属性名称和生成规则。构建规则是可选参数。生成规则有7种形式。生成规则含义需要依赖于属性值的类型。属性值可以指定初始值和类型。生成规则的格式为:1.1.属性值是字符串类型。变量的重复次数是一个随机值。'name|min-max':string通过生成一个字符串在min和max之间重复一个字符串。.//使用'name|1-3':'a'运行结果:生成一个字符串变量,a的个数在1-3之间。可能的结果是:a,aa,aaa直接指定重复次数。'name|count':string通过生成字符串重复count次的字符串。.//使用'name|3':'a'运行结果:aaa1.2,属性值为Number,生成并累加数字。'name|+1':num初始值为num,生成的属性值自动加1,生成区间值。'name|min-max':num生成一个介于min和max之间的值,num用来指定类型//使用'name|1-3':1运行结果:生成一个1-3之间的数。可能的结果是:1,2,3生成带小数点的数字。'name|min-max.dmin-dmax':num生成一个浮点数,整数部分在min和max之间,小数部分在dmin到dmax之间。num用于指定类型。//使用'num1|1-10.1-2':1运行结果:生成一个1-10之间,小数点后1到2位的浮点数。如:2.1、3.12等'num2|5.1-2':1生成整数部分为5并保留1到2位小数的浮点数。如:5.1、5.33、5.09等'num3|5.2':1生成整数5,保留两位小数的浮点数。如:5.11、5.67等1.3.属性值为boolean'name|1':boolean产生一个随机值,true和false的概率各为一半。//使用'isLike|1':true生成isLike的值可能为true,false。概率是一样的。'name|min-max':value随机生成一个布尔值,为value的概率为min/(min+max),为!value的概率为max/(min+max)。//使用'like|1-5':true产生true的概率是1/6。生成false的概率为5/61.4,属性值为objectObject,生成指定属性个数的对象。'obj|num':对象从属性值对象中随机选择num个属性。//使用'obj|2':{a:'1',b:'2',c:'3'},运行结果可能是:{a:"3",b:"2"}{c:"3",b:"2"}{a:"3",c:"2"}生成一个具有随机数量属性的对象。'obj|min-max':object从object中随机选择min到max的属性生成一个object。//使用'obj|1-2':{a:'1',b:'2',c:'3'}结果可能是:{a:"3"}{b:"3"}{c:"3"}{a:"3",b:"2"}{c:"3",b:"2"}{a:"3",c:"2"}1.5,属性值is数组Array将数组中的一个元素作为结果。'arr|1':array从属性值数组中随机选择1个元素作为结果返回//using'arr|1':[1,2,3]运算结果为:1,2,3三个结果到生成一个新数组。'arr|min-max':array通过重复array的元素生成一个新数组,重复次数为min到max。//使用'arr|1-2':[1,2,3]结果是:[1,2,3]或[1,2,3,1,2,3]'arr|num':array通过将数组的元素重复num次来生成一个新数组。//Using'arr|2':[1,2,3]结果为:[1,2,3,1,2,3]1.6、属性值为函数函数'name':函数函数返回值作为最终的属性值。//使用'name':()=>{return'weblearn'}将结果作为数据占位符中的weblearn运行,属性值为函数,具有重要意义。后面会重点讲解。1.7.属性值为正则RegExp'name':regexp根据正则表达式regexp反向生成匹配字符串。用于生成自定义格式字符串//Use'reg':/[a-zA-Z0-9]2/生成由大小写字母和数字组成的长度为2的字符串'reg':/\d{5,10}/生成任意5-10位数字字符串2.数据占位符定义说明数据占位符只在属性字符串中占据一个位置,不会出现在最终的属性值中。使用格式:@placeholder@placeholder(parameter[,parameter])//使用'name':"@name"生成英文名字,如:EdwardRodriguez//withparameter'first':"@name(middle)"生成一个带有中间名的英文名。如:RuthPaulRobinson'name':"@cname",生成一个中文名字注意:使用@来标识后面的字符串是一个标识符。占位符指的是mock.Random中的方法。如果需要扩展自定义占位符,请使用Mock.Random.extend()。占位符也可以引用数据模板中的内容。占位符优先于数据模板中的引用属性。支持相对和绝对路径。Mock.mock('@string("number",5)')生成一个五位数的字符串Mock.mock('@color')生成一个随机颜色//等同于Random.color()3.使用示例创建一个api接口并返回一个随机生成的数组:exportdefault[{url:"/api/list",method:"post",response:({url,body})=>{//body是在post方法中传递的inputdata//url为请求接口,get方法也包括传入的参数return{code:200,message:"ok",//生成一个数组//长度在10到20之间'list|10-20':[{name:'@cname'//生成中文名}]};}}]占位符是指Mock.random中的方法,所以我们可以将上面的代码改成:'list|10-20':[{name:Random.cname()//生成中文名}]这时候我们再检查一下,发现生成的数组中的名字是完全一样的。如果我们要生成不同的名字,怎么解决呢?解决方法:将属性值改为函数,将函数的返回值作为最终结果。'list|10-20':[{name:()=>{Random.cname()}}]