Mockjs全面解读

简介

前后端分离架构是现在比较常用的架构,它的主要思想是由前端工程师负责用户的交互逻辑。后端工程师负责代码接口的编写,使用swagger生成api文档提供给前端工程师调用使用。

但是在实际开发过程中,后端写接口往往很慢,可是前端代码的编写却不能因此而耽搁。所以前端需要模拟一些数据,来填补项目的空洞。Mock.js是一种模拟数据的办法,它可以使我们前端在后端没有写好接口的前提下,也可以进行独立开发

安装

npm i mockjs -S

安装完mockjs之后,我们可以在node_modules文件夹内找到mock.js文件,复制它并引入到我们的项目中

或者直接srcipt引入

<script src="https://web.chengqige.com/CSDN/json-server/mock.js"></script>

基本用法

下面演示的是,前端模拟数据。并发出xhr请求这个模拟数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Mock拦截器</title>
    <script src="https://web.chengqige.com/CSDN/json-server/mock.js"></script>
</head>
<body>
<script>
    // 前端生成Mock数据,进行批量导出
    const data = Mock.mock({
        code: 200,
        msg: '商品列表数据',
        'data|5-10': [{
            'id|+1': 1,
            'title': '@ctitle(5,10)',
            'img': "@img('400x400')"
        }]
    })
    Mock.mock('http://xxxx.com/demo', data)
    // 可以拦截请求
    var xhr = new XMLHttpRequest()
    xhr.open('GET', 'http://xxxx.com/demo')
    xhr.send()
    xhr.onload = function () {
        if (xhr.status === 200) {
            console.log(JSON.parse(xhr.responseText))
        }
    }
</script>
</body>
</html>

接下来我们对上面的代码进行解读:

1. 生成mock格式的数据

// 前端生成Mock数据,进行批量导出
const data = Mock.mock({
    code: 200,
    msg: '商品列表数据',
    'data|5-10': [{
        'id|+1': 1,
        'title': '@ctitle(5,10)',
        'img': "@img('400x400')"
    }]
})

在mock中json数据的key值有着特殊的格式,下面介绍它的几个常见格式

格式语法含义
data|5-10data数组长度是随机变化的,长度变化范围是5-10
id|+1id是一个自增字段每次+1
@ctitle(5,10)从汉字字典中随机抽取5-10个汉字,形成随机汉字串(语义不通顺)
@img(400x400)生成400x400的占位图片

这种格式语法方便我们自动化生成大量的模拟数据

上面的data生成的数据为;

{
    "code": 200,
    "msg": "商品列表数据",
    "data": [
        {
            "id": 1,
            "title": "不装四传活院即油物",
            "img": "http://dummyimage.com/400x400"
        },
        {
            "id": 2,
            "title": "四切起权条与据写",
            "img": "http://dummyimage.com/400x400"
        },
        {
            "id": 3,
            "title": "日列领而子律被持管",
            "img": "http://dummyimage.com/400x400"
        },
        {
            "id": 4,
            "title": "主行同府华亲",
            "img": "http://dummyimage.com/400x400"
        },
        {
            "id": 5,
            "title": "五理导相利把严",
            "img": "http://dummyimage.com/400x400"
        },
        {
            "id": 6,
            "title": "参连每斯些圆想省马",
            "img": "http://dummyimage.com/400x400"
        },
        {
            "id": 7,
            "title": "消复织总标指",
            "img": "http://dummyimage.com/400x400"
        },
        {
            "id": 8,
            "title": "适类统务前京着按青",
            "img": "http://dummyimage.com/400x400"
        },
        {
            "id": 9,
            "title": "家别处几音六它",
            "img": "http://dummyimage.com/400x400"
        }
    ]
}

2. 创造拦截器

创造拦截器的意思是,我的模拟数据生成之后,把它映射到一个网址上。前端发送请求,当请求这个网址时候,请求会被自动被拦截,然后重定向到我们的模拟数据上

// 网址可以随便写,因为被解析成字符串,但是http://不能乱写剩下的都行
Mock.mock('http://xxxx.com/demo', data)

好了现在,我们的data数据已经映射在接口http://xxxx.com/demo上了

注意:Mock这个映射只适用于基于xhr的网络请求,不适用于fetch请求。对于axios、fetch的拦截是不起作用的

3.发送AJAX请求

我们使用xhr发送请求,发现我们的请求到的数据是我们的mock模拟数据了

var xhr = new XMLHttpRequest()
xhr.open('GET', 'http://xxxx.com/demo')
xhr.send()
xhr.onload = function () {
    if (xhr.status === 200) {
        console.log(JSON.parse(xhr.responseText))
    }
}

小练习:你可以把拦截器的地址修改为https://www.baidu.com,然后xhr请求百度的地址,看看会发生什么?

高级用法

通过基本用法的练习,我们了解了mock的格式语法特点,了解了拦截器机制。接下来我们玩点高级的技术吧,我们直接创建一个服务器

json-server

json-server是一个直接把json数据当成服务器的一种手段,非常的好用。

安装
npm install -g json-server
使用方法

我们在项目文件夹下新建文件server.json

server.json

{
  "stu": [
    {
      "id": "18413001",
      "name": "cqg"
    },
    {
      "id": "18413002",
      "name": "wht"
    },
    {
      "id": "18413003",
      "name": "hkc"
    }
  ],
  "age": [
    {
      "age": 18
    },
    {
      "age": 19
    }
  ]
}

然后我们在项目文件夹打开终端

json-server server.json

你会看到控制台下面生成这两个服务(分别对应key中的stu、age)

我们访问这个链接就生成了这个服务了

结合mockjs使用

json-server虽然强大,但是json数据还是需要我们自己去写呀。但是mock有格式化语法可以帮助我们生成json数据,所以它们两个配合是有戏看的

server.js

// json-server和mockjs混合解决方案
const Mock = require('mockjs')
const data = Mock.mock({
    'data|5-10': [{
        'id|+1': 1,
        'title': '@ctitle(5,10)',
        'img': '@img(\'400x400\')'
    }]
})
module.exports = () => {
    return data
}

启动服务:

json-server server.js

生成的服务:

这里需要解读一下,我们的json-server不仅可以启动json文件,还可以启动js文件。不过需要导出模块,而且模块必须返回一个json格式数据才行

以上就是mock教学的全部内容

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值