学习 | mockjs入门
最近工作有用到mockjs模拟数据,实现前后端分离,今天系统的把mockjs的API都过了一遍,算是入门吧。
什么是mockjs
mockjs就是一个模拟数据,生成随机数据,拦截ajax请求。
为什么使用mockjs
1、后端给不了数据
2、数据太长,将数据放在js文件里面,完成后挨个改url
3、还原真实数据
4、特殊格式 ip 随机数 图片 地址
5、分页显示
mockjs基本语法(require.js)
参考index.html
语法规则
1、数据模板定义规范
"name|rule":value
'name|min-max': value
通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max。
'name|count': value
通过重复 string 生成一个字符串,重复次数等于 count。
'name|min-max.dmin-dmax': value
生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmin 到 dmax 位。
'name|min-max.dcount': value
生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dcount 位。
'name|count.dmin-dmax': value
生成一个浮点数,整数部分等于count,小数部分保留 dmin 到 dmax 位。
'name|count.dcount': value
生成一个浮点数,整数部分等于count,小数部分保留 dcount 位。
'name|+1': value
属性值自动加 1,初始值为 value
'name|1': boolean
属性值自动加 1,初始值为 value
1、Mock.mock(template)
根据数据模板生成模拟数据
2、Mock.mock(rurl,template)
当拦截到匹配 rurl 的 Ajax 请求时,将根据数据模板 template 生成模拟数据,并作为响应数据返回。
3、Mock.mock( rurl, function( options ) )
当拦截到匹配 rurl 的 Ajax 请求时,函数 function(options) 将被执行,并把执行结果作为响应数据返回。
4、Mock.mock( rurl, rtype, template )
当拦截到匹配 rurl 和 rtype 的 Ajax 请求时,将根据数据模板 template 生成模拟数据,并作为响应数据返回。
5、Mock.mock( rurl, rtype, function( options ) )
当拦截到匹配 rurl 和 rtype 的 Ajax 请求时,函数 function(options) 将被执行,并把执行结果作为响应数据返回。
6、Mock.setup( settings )
配置拦截 Ajax 请求时的行为。支持的配置项有:timeout。
7、占位符 Mock.Random
Mock.Random 是一个工具类,用于生成各种随机数据
8、自定义占位符 Mock.Random.extend({func});
用于自定义占位符
9、Mock.valid()
校验真实数据 data 是否与数据模板 template 匹配。
index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <script src="./require.js"></script> <script> require.config({ paths:{ zepto:"./zepto", mock:"http://mockjs.com/dist/mock" } }); require(["mock"],function(M){ var data = M.mock({ 'list|1-10':[{ 'id|+1':1 }] }) console.log(data); }) </script> <body> </body> </html>
index2.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <script src="./require.js"></script> <script> require.config({ paths:{ zepto:"./zepto", mock:"http://mockjs.com/dist/mock" } }); require(["mock"],function(M){ var data = M.mock({ 'list1|1':/[a-z][A-Z][0-9]/, 'list2|1':/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/, 'list3|1':/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/, 'list4|1':/((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)/, }) console.log(data); }) </script> <body> </body> </html>
index3.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <script src="./require.js"></script> <script> require.config({ paths:{ zepto:"./zepto", mock:"http://mockjs.com/dist/mock" } }); require(["zepto","mock"],function($,M){ var temp = { "title":"hejian", "star|1-5":"*", "count|5-9.2":1, "like1|1-2":false, "like2|1":true, "obj1|2-4":{ "1":"北京", "2":"上海", "3":"杭州", "4":"西安", }, "obj2|2":{ "1":"安康", "2":"宝鸡", "3":"咸阳", "4":"户县" }, "array|1":["1","2","3","5"], 'function':function(){ return this.title; } } var data = M.mock(temp); var temp2 = { "list|1-10":[{ "id|+1":1, 'email':'@EMAIL' }] } M.mock(/\.json/,temp2); $.ajax({ url:"hello.json", dataType:"json", success:function(data){ console.log(data); } }) var func = function(options){ return options; } M.mock(/\.json/,func); $.ajax({ url:"hello.json", dataType:"json", success:function(data){ console.log(data); } }) $.ajax({ url:"hello.json", dataType:"json", data:{ id:1, name:"2" }, success:function(data){ console.log(data); } }) $.ajax({ url:"hello.json", type:"post", success:function(data){ console.log(data); } }) M.mock(/\.json/,'get',{ type:"get" }); $.ajax({ url:"hello.json", type:"post", success:function(data){ console.log(data); } }) M.mock(/\.json/,'get',function(options){ return options.type; }) $.ajax({ url:"hello.json", type:"get", success:function(data){ console.log(data); } }) // M.setup({ // timeout:400, // }) // $.ajax({ // url:"hello.json", // timeout:400, // success:function(data){ // console.log(data); // } // }) var Random = M.Random; console.log(Random.email()); var data3 = M.mock('@email'); console.log(data3); var data4 = M.mock({"email":"@email"}); console.log(data4); console.log(M.mock({boolean:'@boolean'})); console.log(M.mock({natural:'@natural'})) console.log(M.mock({integer:'@integer'})) console.log(M.mock({float:'@float'})) console.log(M.mock({character:'@character'})) console.log(M.mock({string:'@string'})) console.log(M.mock({range:'@range'})) console.log(M.mock({date:'@date'})) console.log(M.mock({time:'@time'})) console.log(M.mock({datetime:'@datetime'})) console.log(M.mock({now:'@now'})) console.log(M.mock({image:'@image'})) console.log(M.mock({dataImage:'@dataImage'})) console.log(M.mock({color:'@color'})) console.log(M.mock({paragraph:'@paragraph'})) console.log(M.mock({word:'@word'})) console.log(M.mock({title:'@title'})) console.log(M.mock({cparagraph:'@cparagraph'})) console.log(M.mock({cword:'@cword'})) console.log(M.mock({ctitle:'@ctitle'})) console.log(M.mock({first:'@first'})) console.log(M.mock({last:'@last'})) console.log(M.mock({name:'@name'})) console.log(M.mock({cfirst:'@cfirst'})) console.log(M.mock({domain:'@domain'})) console.log(M.mock({area:'@area'})) console.log(M.mock({guid:'@guid'})) console.log(M.mock({capitalize:'@capitalize'})) console.log(M.mock({upper:'@upper'})) console.log(M.mock({shuffle:'@shuffle'})) M.Random.extend({ test:function(date){ var city = ["西安","杭州","北京","上海","深圳"]; return this.pick(city); } }) console.log(M.mock("@test")); var temp3 = { name:"value1" } var data = { name :"value2" } console.log(M.valid(temp3,data)); var temp4 = { "key|1-4":"*" } console.log(M.toJSONSchema(temp4)); }) </script> <body> </body> </html>
这三个文件就是自己自学mockjs学习的过程,希望能帮助到大家。