美文网首页
mock的使用

mock的使用

作者: 刘其瑞 | 来源:发表于2019-06-11 09:26 被阅读0次

    mock.js是一款前端开发中拦截Ajax请求再生成随机数据响应的工具.可以用来模拟服务器响应. 优点是非常简单方便, 无侵入性, 基本覆盖常用的接口数据类型.



    思考: 提个简单的开发需求:

    请求后台某个接口,返回10-15条学生数据: 要求包含 姓名,年龄,性别. 成功状态码:200 .成功状态信息: success.
    
    `响应数据结构分析:`
    {
      status:200,
      msg:'success',
      stuInfo:
        {
          name:'abc',
          age:10,
          gender:0
        }
        ,
        ...
        ,
        {
          name:'abc',
          age:10,
          gender:0
        }
      ]
    }
    `方法1: 模拟后台(node/php + mysql)`
      1,搭建node服务器/Apache服务器 
      2,开启Mysql服务, 制定数据库,数据表,添加表信息(添加姓名,年龄,性别的值 和 值类型)
      3,使用node或者php语法关联数据库,声明查询sql语句,并执行sql.
      4,将查询db内容处理为json返回
    代码量: 前端ajax+模板引擎20行左右 + 后台实现代码40行左右 + 繁琐的数据表设计 + 一条条的添加数据库内容  =  BOOM心态爆炸!!!
    
    // 或者你可以...
    `方法2: 完全脱离后台和数据库(mockjs配合vue的拦截器),或者 脱离数据库操作(mockjs简单的node后台)`
      1,搭建node服务器
      2,使用mockjs的mock方法制定随机数据
      3,处理为json返回
    代码量: 前端ajax+模板引擎20行左右 + node服务响应mock数据11行 = 咦嘿嘿很开心!
    代码:
      const app = reqire('express')
      const Mock = require('mockjs')
      app.get('/someApi',(req,res)=>{
        var resData = Mock.mock({
          'status':200,
          'msg':'success',
          'stuData|10-20':[{
            'name|1-3':/[a-z][A-Z]/,
            'age|+1':10,
            'gender|1':true
          }]
        })
        res.end(JSON.stringify(resData))
      })
      app.listen(3000)
    


    一 Mockjs怎么用?

    1 mock.js的使用

    1.1.1 安装并引入mock.js

    创建一个node服务器--server.js文件

    // 引入express
    const express = require('express');
    // 创建服务对象
    const app = express()
    // 准备数据
    var data = '123'
    // 监听路由
    app.get('/', (req, res) => { 
      res.end(data);
    })
    // 开启服务
    app.listen(3000)
    
    1.1.2 安装并引入mock.js
    npm install mockjs 
    或者 
    script:src="http://mockjs.com/dist/mock.js"
    
    1.1.3 mockjs模块模拟数据
      // 引进express
      const express = require('express');
      // 引进mockjs
      const Mock = require('mockjs')
    
      // 准备服务对象
      const app = express()
    
      // 监听路由
      app.get('/', (req, res) => {
    
        // 准备随机数据
        var data = Mock.mock({
          'list|1-20': [{
            'name|3-5': /[a-z][A-Z]/,
            'age|10-15': 15,
            'gender|1': true,
          }]
        })
        res.end(JSON.stringify(data));
      })
    
      // 开启服务
      app.listen(3000)
    
    1.1.4 测试服务

    在terminal窗口中运行命令nodemoon server.js
    在浏览器中请求127.0.0.1:3000 观察响应体


    1560216083(1).jpg
    1.1.5 使用

    这样在ajax请求相关接口就能返回内容随机,结构固定的JSON数据了


    2 mockjs语法

    2.1 Mock.mock()方法

    加对象参数就可以生成响应数据


    2.2 参数对象模板规则
    • 属性名|生成规则:属性值 name | rule : value
    • name: 生成数据的名字字符串
    • |: 一定要加
    • rule: 生成数据的规则
      |min-max 生成个数min至max条
      |count 生成count条
      |min-max.dmin-dmax 1-9.2-3 数字值在1-9之间,小数点后保留2-3位 如 2.1 3.74
      |min-max.dcount 1-9.2 数字值在1-9之间,小数点后保留2位 如2.13 8.54
      |count.dmin-dmax 10.1-2 整数部分是10,小数点部分1-2位 如10.99 10.1
      |count.dcount 10.2 整数部分是10,小数点部分2位 如10.11 10.43
      |+step 'score|+1':1, 以value 1为基准,递增1
    • value: 属性值的规则
      • 字符串
        'name|min-max': string
        通过重复 string 生成一个字符串,min<=重复次数<=max

            'name|count': string 
            通过重复 string 生成一个字符串,重复次数==count。
        
      • 数字
        'name|+1': number
        属性值自动加 1,初始值为 number。

            'name|min-max': number    
            number确定数据类型,生成值在min-max间的整数
        
            'name|min-max.dmin-dmax': number
            number确定数据类型,生成值在min-max间的小数
        
      • 布尔
        'name|1': boolean
        随机生成一个布尔值,真假各50%
        'name|t-f': true
        随机生成一个布尔值,真占t/t+f 假占f/t+f

      • 对象
        'name|count': object
        从属性值 object 中随机选取 count 个属性。

            'name|min-max': object
            从属性值 object 中随机选取 min 到 max 个属性。
        
      • 数组

            'name|1': array
            从属性值 array 中随机选取 1 个元素,作为最终值。
        
            'name|+1': array
            从属性值 array 中顺序选取 1 个元素,作为最终值。
        
            'name|min-max': array
            通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max。
        
            'name|count': array
            通过重复属性值 array 生成一个新数组,重复次数为 count。
            
            var data = mock.mock({
              // 将value数组中的项(对象) 重复计算1-10次 添加到新数组返回
              'obj|1-10':[
                {
                  'score|+1':1
                }
              ]
            })
            //生成 { obj: [ { score: 1 }, { score: 2 }, { score: 3 }, { score: 4 } ] }
        
      • 函数(不用)
        'name': function
        执行函数 function,取其返回值作为最终的属性值,函数的上下文为属性 'name' 所在的对象。

      • 正则
        'name': regexp
        根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串。/[a-z][A-Z][0-9]/ /\w\W\s\S\d\D/ /\d{5,10}/ [\u4e00-\u9fa5]


    2.3 Mock.valid( template, data ) 校验数据(处理请求发送来的数据,如果完全脱离后台就需要该方法)
    • 在vue中可以脱离后台开发(参考文章)

    • template 必选, 表示数据模板,可以是对象或字符串

    • data 必选, 表示真实数据

          // 可以用来做基于mock的ajax请求参数的处理
          var template = {
              name: 'value1'
          }
          var data = {
              name: 'value2'
          }
          Mock.valid(template, data)//返回值是一个校验结果数组
          // 如果匹配则 返回空数组
          // 如果不匹配 messages属性表示tteamplate和data不匹配的原因
      

    2.4 Mock.random工具对象
    • Mock.Random 是一个工具类,用于生成各种随机数据。不用掌握,用到就点击蓝字查

    相关文章

      网友评论

          本文标题:mock的使用

          本文链接:https://www.haomeiwen.com/subject/muqffctx.html