zoukankan      html  css  js  c++  java
  • 9.Vue技术栈开发实战-使用Mock模拟Ajax请求


    https://github.com/lison16/vue-cource/blob/master/src/mock/mock.doc.md

    用mock.js对ajax请求作出拦截,并响应

    拦截ajax请求,并 且作出响应
    mockJs的用法,详细介绍

    响应模拟

    精简版的文档

    在这里引进了mock并导出

    把Mock在main.js内引入,但是生产环境,我们不希望mock拦截,只需要在开发环境拦截。

    不是生产环境才引入mock

    我们之前在home页,做了一个接口的调用


    ​​​​​​

    我们是在api/user.js里面定义了这个方法

    现在对使用Mock对这个请求进行拦截。
    使用Mock.mock方法拦截请求。

    第一个参数可以是个字符串也可以是个正则表达式,如果写字符串的话,需要把完整的路径都写上。

    第二个参数可以写类型,post还是get,当然也可以省略。

    最后一个参数是拦截请求后,用哪个方法来处理
    mock下创建response文件夹



    接收一个参数,我们把这个参数打印出来。

    把user内定义的方法,引进来。当拦截到请求就会调用user内定义的方法

    点击请求数据

    详细介绍mock的使用方法


    ## Mock.mock()
    - Mock.mock( requestUrl?, requestType?, template|function(options) )
    - Mock.mock( template )
    - Mock.mock( requestUrl, template )
    - Mock.mock( requestUrl, requestType, template )
    - Mock.mock( requestUrl, requestType, function(options) )
    > requestUrl: 要拦截的URL,字符串或正则表达式<br>
    equestType: 要拦截的请求类型,get/post/put/delete/options...<br>
    template: 数据模板<br>
    function(options):生成响应数据的函数,options --> { url, type, body }

    正则拦截


    返回结果可以直接用模板

    数据模板

    ### 数据模板定义
    > 数据模板中每个属性由3部分组成: **属性名|生成规则:属性值**
    1. 'name|min-max': value
    2. 'name|count': value
    3. 'name|min-max.dmin-dmax': value
    4. 'name|min-max.dcount': value
    5. 'name|count.dmin-dmax': value
    6. 'name|count.dcout': value
    7. 'name|+step': value
    *属性值*中可以包含@占位符
    *属性值*还指定了最终值的初始值和类型

    #### 1.属性值是字符串
    1. 'name|min-max': string
      > 通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max
    2. 'name|count': string
      > 通过重复 string 生成一个字符串,重复次数等于 count

    引进mock,使用模板,它可以是一个字符串,也可以是一个对象。

    调用mock的mock方法并把模板传进去。并返回

    重复lison最小3遍最多4遍

    重复了3遍lison

    加上参数,只需要拦截post请求,要不然上面输出来了多次


    这样就响应了一次,重复了3遍

    拼接5次

    为了方便我们看,把data打印出来

    .属性值是数字

    #### 2.属性值是数字
    1. 'name|+1': number
      > 属性值自动加 1,初始值为 number
    2. 'name|min-max': number
      > 生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型
    3. 'name|min-max.dmin-dmax': number
      > 生成一个浮点数,整数部分大于等于 min、小于等于 max,小数部分保留 dmin 到 dmax 位

    每次输出的值,age都会加2,while循环了3次。

    返回一个4到10的数字,每次都随即返回的

     小数位是3到10的数字小数位是2位到5位

    布尔值类型


    #### 3.属性值是布尔值
    1. 'name|1': boolean
      > 随机生成一个布尔值,值为 true 的概率是 1/2,值为 false 的概率同样是 1/2
    2. 'name|min-max': value
      > 随机生成一个布尔值,值为 value 的概率是 min / (min + max),值为 !value 的概率是 max / (min + max)
    bool是2分之一的概率。
    bool2的概率是十分之一是true ,十分之九是false。 1除以1+9

    属性值是对象

    #### 4.属性值是对象
    1. 'name|count': object
      > 从属性值 object 中随机选取 count 个属性
    2. 'name|min-max': object
      > 从属性值 object 中随机选取 min 到 max 个属性

    返回的结果随即抽取2个


    1到2个

    5.属性值是数组


    #### 5.属性值是数组
    1. 'name|1': array
      > 从属性值 array 中随机选取 1 个元素,作为最终值
    2. 'name|+1': array
      > 从属性值 array 中顺序选取 1 个元素,作为最终值
    3. 'name|min-max': array
      > 通过重复属性值 array 生成一个新数组,重复次数大于等于 min,小于等于 max
    4. 'name|count': array
      > 通过重复属性值 array 生成一个新数组,重复次数为 count

    重复这个数组,2到4次

    重复数组两次

    6.属性值是函数


    #### 6.属性值是函数
    1. 'name': function
      > 执行函数 function,取其返回值作为最终的属性值,函数的上下文为属性 'name' 所在的对象

    7.属性值是正则表达式

    #### 7.属性值是正则表达式
    1. 'name': regexp
      > 根据正则表达式 regexp 反向生成可以匹配它的字符串。用于生成自定义格式的字符串

    第一个是1到9的数字,第二个是a到z的字母

    数据占位符定义

    ### 数据占位符定义
    1. 用 @ 来标识其后的字符串是 占位符
    2. 占位符 引用的是 Mock.Random 中的方法
    3. 通过 Mock.Random.extend() 来扩展自定义占位符
    4. 占位符 也可以引用 数据模板 中的属性
    5. 占位符 会优先引用 数据模板 中的属性
    6. 占位符 支持 相对路径 和 绝对路径
    ----
    ## Mock.setup()
    > 配置Ajax请求的行为,暂时支持的配置项有timeout
    ```javascript
      Mock.setup({
        timeout: 500
      })
      Mock.setup({
        timeout: '100-600'
      })
    ```
    ----
    请求明显有个延迟

    Mock.Random

    ## Mock.Random
    ```javascript
      const Random = Mock.Random
      Random.email() // => sd.sdf@oksd.com
      Mock.mock('@email') // => sd.sdf@oksd.com
      Mock.mock({ email: 'sd.sdf@oksd.com' }) // => { email: "sd.sdf@oksd.com" }
    ```
    生成随即的Email字段

    再来请求一次,邮箱的格式又变了。每次的变化都不一样

    Mock.mock生成邮箱的方式

    可使用的占位符如下

     

    Basic

    1. Random.boolean(min?, max?, current? )
    2. Random.natural(min?, max? )
    3. Random.integer(min?, max? )
    4. Random.float( min?, max?, dmin?, dmax? )
    5. Random.character( pool? ) // pool => lower/upper/number/symbol 生成字符串
    6. Random.string( pool?, min?, max? ) // pool => lower/upper/number/symbol
    7. Random.range( start?, stop, step? )

    s每个元素之间相差1,

    3开始到10,每个元素先相差2

    Random.Date


    Random.time

    Random.dattime

    日期+时间

    Random.now





    Random.image()

    在Home.vue内加一个img的标签










    传入尺寸100x200

    第二个参数是图片的颜色。

    在图片上显示的文字

    文字的颜色

    传入图片的格式


    Base64的图片

    Color

    1. Random.color() // => #3538B2
    2. Random.hex() // => #3538B2
    3. Random.rgb() // => rgb(242, 198, 121)
    4. Random.rgba() // => rgba(242, 198, 121, 0.13)
    5. Random.hsl() // => hsl(345, 82, 71)


    页面上给按钮绑定一个color属性

    定义数据

    请求数据后,获取color

    Text

     

    1. Random.paragraph( min?, max? ):英文段落
    2. Random.cparagraph( min?, max? ):中文段落
    3. Random.sentence( min?, max? )
    4. Random.csentence( min?, max? ):中文句子,里面有几个中文句子
    5. Random.word( min?, max? ):返回英文的单词,
    6. Random.cword( pool?, min?, max? ):中文词
    7. Random.title( min?, max? ):英文标题
    8. Random.ctitle( min?, max? ):中文标题

    定义一段次,最少取2个 最多取5个

    Name

    1. Random.first()
    2. Random.last()
    3. Random.name( middle? )
    4. Random.cfirst():中文的姓
    5. Random.clast():中文名字
    6. Random.cname():中文名



     

    Web

    1. Random.url( protocol?, host? ):随机的url
    2. Random.protocol():协议 http 还是https
    3. Random.domain() // 域名
    4. Random.tld() // 顶级域名
    5. Random.email( domain? )
    6. Random.ip()


    Address

    返回中国的大区

    返回随机的省份

    随机的地市,如果设置为true那么连同城市也一起返回。


    county  镇一级别的。

    邮政编码

    Helper

    1. Random.capitalize( word ):英文单词首字母大写
    2. Random.upper( str )
    3. Random.lower( str )
    4. Random.pick( arr )
    5. Random.shuffle( arr )




    数组,顺序打乱

     

    Miscellaneous杂项

    1. Random.guid()
    2. Random.id()
    3. Random.increment( step? )

    扩展

    Random.extend({
      fruit () {
        const fruit = ['apple', 'peach', 'lemon']
        return this.pick(fruit)
      }
    })
    Random.fruit() // => 'peach'
    Mock.mock('@fruit')  // => 'lemon'
    Mock.mock({
      fruit: '@fruit' // => 'peach'
    })
    

    使用Random.extend来扩展。

    假设定义一个水果的列表。pick是从数组中抽取任意一项,




    占位符的形式

    Valid

    返回传入的模板是否符合规则

    把定义的模板转换成JSONSchema的形式


    结束

  • 相关阅读:
    赛前一个月
    Barricade---hdu5889(最短路+网络流)
    Tea---hdu5881(规律)
    The Best Path---hdu5883(欧拉路径)
    Cure---hdu5879(打表+找规律)
    Python列表操作
    Zabbix在Docker中的应用和监控
    flannel网络设置
    Volume
    Service资源清单
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/12944445.html
Copyright © 2011-2022 走看看