前后端分离——Mock.js

前端项目需要用到的Mock自己看API学习,感觉收获满满,加油!!!
啊啊啊!!!,我就是参考的官网,没有抄别的,老是不通过审核,哎,我也不管能不能过了,我就说说吧,能过最后,不能也就这样,这都是的一笔财富。我突然感觉压力好大,因为快就业了,感觉一下就长大,想的多了,还是怀念高中的时光,也不知道能找到一个什么样的工作,我一个小姑娘,本来跟男生学这个就差很多,我又感觉我好笨,最近跟舍友感情局,聊到白月光与朱砂痣,想到了我得意难平,如果再给我一个机会,我一定要好好把握

什么是Mock

官网

http://mockjs.com/

mock解决的问题

开发时,后端还没完成数据输出,前端只好写静态模拟数据。数据太长了,将数据写在js文件里,完成后挨个改url。某些逻辑复杂的代码,加入或去除模拟数据时得小心翼翼。想要尽可能还原真实的数据,要么编写更多代码,要么手动修改模拟数据。特殊的格式,例如IP,随机数,图片,地址,需要去收集

mock优点

  1. 前后端分离
    让前端工程师独立于后端进行开发。

  2. 增加测试的真实性
    通过随机数据,模拟各种场景。

  3. 开发无侵入

    通过随机数据,模拟各种场景。

  4. 用法简单

    符合直觉的接口。

  5. 数据类型丰富

    支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。

  6. 方便扩展
    支持支持扩展更多数据类型,支持自定义函数和正则。

  7. 在已有接口文档的情况下,我们可以直接按照接口文档来开发,将相应的字段写好,在接口完成 之后,只需要改变url地址即可。

  8. 不涉及跨域问题

在这里插入图片描述

安装Mock

npm install mockjs

或者在vue脚手架中下载

在vue中使用Mock

在src中创建Mock/index.js文件储存生成的数据

然后在main.js主入口文件中引入改文件

然后就可以在页面中进行axios请求了

Mock/index.js文件

const Mock = require("mockjs");
let data = Mock.mock({
    "data|4": [ //生成4条数据 数组
        {
            "shopId|+1": 1,//生成商品id,自增1
        }
    ]
})
Mock.mock(/goods\/goodAll/, 'post', () => { //三个参数。第一个路径,第二个请求方式post/get,第三个回调,返回值
    return data
})

main.js

import "./mock/index.js"

App.vue

<template>
  <div id="app">
    <ul>
      <li v-for="(user) in foodList" :key="user.shopId">
        {{ user.shopId }}
      </li>
    </ul>
  </div>
</template>

<script>
import axios from "axios";

export default {
  data() {
    return {
      foodList: [],
    };
  },
  mounted() {
    this.initMsg();
  },
  methods: {
    initMsg() {
      axios.post("http://localhost:8080/goods/goodAll").then((res) => {
        this.foodList = res.data.data;
        console.log(this.foodList);
      });
    },
  },
};
</script>

<style>
</style>

效果:

在这里插入图片描述

可以尝试一下这个小Demo,你就可以简单的使用mock了

Mock知识点

语法规范

Mock.js 的语法规范包括两部分:

  1. 数据模板定义规范(Data Template Definition,DTD)
  2. 数据占位符定义规范(Data Placeholder Definition,DPD)
数据模板定义规范 DTD

数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:

// 属性名   name
// 生成规则 rule
// 属性值   value
'name|rule': value

注意:

  • 属性名生成规则 之间用竖线 | 分隔。

  • 生成规则 是可选的。

  • 生成规则

    有 7 种格式:

    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.dcount': value
    7. 'name|+step': value
  • 生成规则 的 含义 需要依赖 属性值的类型 才能确定。

  • 属性值 中可以含有 @占位符

  • 属性值 还指定了最终值的初始值和类型。

数据占位符定义规范 DPD

占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。

占位符 的格式为:

@占位符
@占位符(参数 [, 参数])

注意:

  1. @ 来标识其后的字符串是 占位符
  2. 占位符 引用的是 Mock.Random 中的方法。
  3. 通过 Mock.Random.extend() 来扩展自定义占位符。
  4. 占位符 也可以引用 数据模板 中的属性。
  5. 占位符 会优先引用 数据模板 中的属性。
  6. 占位符 支持 相对路径绝对路径

Mock.mock()

Mock.mock( rurl?, rtype?, template|function( options ) )

根据数据模板生成模拟数据。

  • rurl

    可选。

    表示需要拦截的 URL,可以是 URL 字符串或 URL 正则。例如 /\/domain\/list\.json/'/domian/list.json'

  • rtype

    可选。

    表示需要拦截的 Ajax 请求类型。例如 GETPOSTPUTDELETE 等。

  • template

    可选。

    表示数据模板,可以是对象或字符串。例如 { 'data|1-10':[{}] }'@EMAIL'

  • function(options)

    可选。

    表示用于生成响应数据的函数。

    • options

      指向本次请求的 Ajax 选项集,含有 urltypebody 三个属性,参见 XMLHttpRequest 规范

Mock.setup()

Mock.setup( settings )

  • Mock.setup( settings )

配置拦截 Ajax 请求时的行为。支持的配置项有:timeout

settings

必选。

配置项集合。

timeout

可选。

指定被拦截的 Ajax 请求的响应时间,单位是毫秒。值可以是正整数,例如 400,表示 400 毫秒 后才会返回响应内容;也可以是横杠 '-' 风格的字符串,例如 '200-600',表示响应时间介于 200 和 600 毫秒之间。默认值是'10-100'

Mock.setup({
    timeout: 400
})
Mock.setup({
    timeout: '200-600'
})

目前,接口 Mock.setup( settings ) 仅用于配置 Ajax 请求,将来可能用于配置 Mock 的其他行为。

Mock.Random

Mock.Random 是一个工具类,用于生成各种随机数据。

Mock.Random 的方法在数据模板中称为『占位符』,书写格式为 @占位符(参数 [, 参数])

var Random = Mock.Random
Random.email()
// => "n.clark@miller.io"
Mock.mock('@email')
// => "y.lee@lewis.org"
Mock.mock( { email: '@email' } )
// => { email: "v.lewis@hall.gov" }

注意

方法

Mock.Random 提供的完整方法(占位符)如下:

TypeMethod
Basicboolean, natural, integer, float, character, string, range, date, time, datetime, now
Imageimage, dataImage
Colorcolor
Textparagraph, sentence, word, title, cparagraph, csentence, cword, ctitle
Namefirst, last, name, cfirst, clast, cname
Weburl, domain, email, ip, tld
Addressarea, region
Helpercapitalize, upper, lower, pick, shuffle
Miscellaneousguid, id

具体的方法可以参考mock官网

扩展

Mock.Random 中的方法与数据模板的 @占位符 一一对应,在需要时还可以为 Mock.Random 扩展方法,然后在数据模板中通过 @扩展方法 引用。例如:

Random.extend({
    constellation: function(date) {
        var constellations = ['白羊座', '金牛座', '双子座', '巨蟹座', '狮子座', '处女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '双鱼座']
        return this.pick(constellations)
    }
})
Random.constellation()
// => "水瓶座"
Mock.mock('@CONSTELLATION')
// => "天蝎座"
Mock.mock({
    constellation: '@CONSTELLATION'
})
// => { constellation: "射手座" }

Mock.valid()

Mock.valid( template, data )

校验真实数据 data 是否与数据模板 template 匹配。

  • Mock.valid( template, data )

  • template

    必选。

    表示数据模板,可以是对象或字符串。例如 { 'list|1-10':[{}] }'@EMAIL'

  • data

    必选。

    表示真实数据。

var template = {
    name: 'value1'
}
var data = {
    name: 'value2'
}
Mock.valid(template, data)
// =>
[
    {
        "path": [
            "data",
            "name"
        ],
        "type": "value",
        "actual": "value2",
        "expected": "value1",
        "action": "equal to",
        "message": "[VALUE] Expect ROOT.name'value is equal to value1, but is value2"
    }
]

Mock.toJSONSchema()

Mock.toJSONSchema( template )

把 Mock.js 风格的数据模板 template 转换成 JSON Schema
我感觉就是把Mock.js风格的数据模板转换为json格式的

  • Mock.toJSONSchema( template )

  • template

    必选。

    表示数据模板,可以是对象或字符串。例如 { 'list|1-10':[{}] }'@EMAIL'

var template = {
    'key|1-10': '★'
}
Mock.toJSONSchema(template)
// =>
{
    "name": undefined,
    "path": [
        "ROOT"
    ],
    "type": "object",
    "template": {
        "key|1-10": "★"
    },
    "rule": {},
    "properties": [{
        "name": "key",
        "path": [
            "ROOT",
            "key"
        ],
        "type": "string",
        "template": "★",
        "rule": {
            "parameters": ["key|1-10", "key", null, "1-10", null],
            "range": ["1-10", "1", "10"],
            "min": 1,
            "max": 10,
            "count": 3,
            "decimal": undefined,
            "dmin": undefined,
            "dmax": undefined,
            "dcount": undefined
        }
    }]
}
var template = {
    'list|1-10': [{}]
}
Mock.toJSONSchema(template)
// =>
{
    "name": undefined,
    "path": ["ROOT"],
    "type": "object",
    "template": {
        "list|1-10": [{}]
    },
    "rule": {},
    "properties": [{
        "name": "list",
        "path": ["ROOT", "list"],
        "type": "array",
        "template": [{}],
        "rule": {
            "parameters": ["list|1-10", "list", null, "1-10", null],
            "range": ["1-10", "1", "10"],
            "min": 1,
            "max": 10,
            "count": 6,
            "decimal": undefined,
            "dmin": undefined,
            "dmax": undefined,
            "dcount": undefined
        },
        "items": [{
            "name": 0,
            "path": ["data", "list", 0],
            "type": "object",
            "template": {},
            "rule": {},
            "properties": []
        }]
    }]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值