MockJs

MockJs 是一种用于生成随机数据和拦截Ajax请求的工具,常用于前端开发中后端接口未完成时的模拟。它允许你定义数据模板和生成规则,模拟各种HTTP请求,提供增删改查等场景的支持。在Vue项目中,可以通过vue-cli创建项目,安装MockJs,创建mock文件夹并配置拦截器来实现数据模拟。
摘要由CSDN通过智能技术生成

MockJs

1.什么是mockJs
  • 生成随机数据,拦截Ajax请求
2.为什么要使用mockJs
原因:
  • 在实际开发当中,由于后端接口还没有完成,前端为了不影响工作效率,需要自己模拟数据后端接口返回数据
解决:
  • 采用json数据模拟,生成数据比较繁琐,也比较有局限性,没办法达到增删改查
  • 采用mockJs进行数据模拟,可以模拟各种场景(get,post)生成接口,并随机生成数据,还可以进行增删改查
3.使用mockJs
使用vue-cli创建基本的vue项目
  • vue create 项目名称
    //如下步骤参考vue项目创建
    
安装mockJs
  • npm install mockjs
    //or
    npm install mockjs --save-dev(推荐)
    
src目录下创建mock文件夹,并在该文件夹中创建index.js文件
  • //index.js的写法
    let Mock = require('mockjs')//引入mockjs
    //这里可以使用解构赋值,拿到data(数组),使用数组的方法实现增删
    let data = Mock.mock({
        'list|20-60':[{//名字叫做list的数组,里面元素个数在20-60之间
        	name:'@cname()',//中文名字的占位符
        	id:'@id()',
        	address:'@city(true)'//括号内的true意思是开启省前缀
        }]
    })
    // 输出结果
    console.log(data)
    
main.js中引入
  • //main.js
    import './mock/index.js'//到时后端接口好了就注释掉这一行就成
    
4.使用语法(官网语法)
数据模板定义规范DTD
  • 'name|rule':value
    //name : 属性名
    //rule : 生成规则
    //value : 属性值
    

    注意:

    • 属性名生成规则 之间用竖线|分割。
    • 生成规则是可选的。
      • ‘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
    • 生成规则含义 需要依赖 属性值的类型 才能确定。
    • 属性值 中可以含有@占位符
    • 属性值 还指定了最终值的初始值和类型。
生成规则示例:
  1. 属性值是字符串 String

    • 'name|min-max': string
      

      ​ 通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max

    • 'name|count': string
      

      ​ 通过重复 string 生成一个字符串,重复次数等于 count

  2. 属性值是数字 Number

    • 'name|+1': number
      

      ​ 属性值自动加 1,初始值为 number

    • 'name|min-max': number
      

      ​ 生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型。

    • 'name|min-max.dmin-dmax': number
      

      ​ 生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmindmax 位。eg:

    • Mock.mock({
          'number1|1-100.1-10': 1,//整数范围是1-100,小数范围是1-10
          'number2|123.1-10': 1,//整数部分是123,小数范围是1-10
          'number3|123.3': 1,//整数部分是123带三位小数
          'number4|123.10': 1.123//整数部分是123带十位小数
      })
      // =>
      {
          "number1": 12.92,
          "number2": 123.51,
          "number3": 123.777,
          "number4": 123.1231091814
      }
      
  3. 属性值是布尔型 Boolean

    • 'name|1': boolean
      

      ​ 随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2。

    • 'name|min-max': value
      

      ​ 随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)

  4. 属性值是对象 Object

    • 'name|count': object
      

      ​ 从属性值 object 中随机选取 count 个属性。

    • 'name|min-max': object
      

      ​ 从属性值 object 中随机选取 minmax 个属性。

  5. 属性值是数组 Array

    • 'name|1': array
      

      ​ 从属性值 array 中随机选取 1 个元素,作为最终值。

    • 'name|+1': array
      

      ​ 从属性值 array 中顺序选取 1 个元素,作为最终值。

    • 'name|min-max': array
      

      ​ 通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max

    • 'name|count': array
      

      ​ 通过重复属性值 array 生成一个新数组,重复次数为 count

  6. 属性值是函数 Function

    • 'name': function
      

      ​ 执行函数 function,取其返回值作为最终的属性值,函数的上下文为属性 'name' 所在的对象。

  7. 属性值是正则表达式 RegExp

    • 'name': regexp
      

      ​ 根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串。

      eg:

      • 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"
        }
        
数据占位符定义规范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"
        }
    }
    
5.mock拦截请求
  • Mock.mock(rurl?,rtype?,template|function(options))
    • rurl :可选。表示需要拦截的 URL,可以是 URL 字符串或 URL 正则(匹配带参数的url)。例如 /\/domain\/list\.json/'/domian/list.json'
    • rtype:可选。表示需要拦截的 Ajax 请求类型。例如 GETPOSTPUTDELETE 等。
    • template:可选。表示数据模板,可以是对象或字符串。例如 { 'data|1-10':[{}] }'@EMAIL'
    • function(options):可选。表示用于生成响应数据的函数。
      • options 指向本次请求的Ajax选项集,含有url,typebody三个属性。
        • 使用JSON.parse(options.body)使其转换成为对象。
  • 定义get请求
    Mock.mock('api/news/content','get',{
    	list:[
    		{
    			name:"@cname()",
    			id:"@id()",
    			address:"city(true)"
    		}
    	]
    })
    
  • 定义post请求
    Mock.mock('api/news/content','post',{
    	list:[
    		{
    			name:"@cname()",
    			id:"@id()",
    			address:"city(true)"
    		}
    	]
    })
    //另一种写法
    const data =Mock.mock({
        'list|8-20':[
            {
                name:"@cname()",
    			id:"@id()",
    			address:"city(true)"
            }
        ]
    })
    Mock.mock('api/news/content','post',()=>{//推荐使用函数返回
        return {
            status:200,
            message:'获取新闻成功',
            data:data//这里的data需要在外面定义
    	}
    })
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值