Mock.js(简单代替后台)

news2024/10/7 20:29:03
Mock.js (官网http://mockjs.com/)是一款模拟数据生成器,旨在帮助前端开发人员独立于后端进行开发,帮助编写单元测试。

二、为什么使用mockjs

在做开发时,当后端的接口还未完成,前端为了不影响工作效率,手动模拟后端接口。

1、我们可以使用json文件来模拟后台数据,但比较局限,无法模拟数据的增删改查
2、使用json-server模拟,但不能随机生成所需数据
3、使用mockjs模拟后端接口,可随机生成所需数据,可模拟对数据的增删改查

三、mockjs的优点

1、前后端分离
2、可随机生成大量的数据
3、用法简单
4、数据类型丰富
5、可扩展数据类型
6、在已有接口文档的情况下,我们可以直接按照接口文档来开发,将相应的字段写好,在接口完成 之后,只需要改变url地址即可。

四、mockjs使用

1、安装: npm install mockjs --save-dev
    • 常用语法:

    "id|1-9999": 0, // 返回 1 到 9999 随机数
    "username": "@cname", // @cname为默认随机中文名  @name为随机英文名
    "age|1-100": 0,
    "email": "@email", // 随机邮箱

    "city":'@province', // 随机 省份
    // "city":"@city", // 随机 城市
    // "city": "@county", // 随机 县
    // "city":"@city(true)", // 随机 "省份 城市"  例如 "江苏 连云港"
    // "city": "@county(true)", // 随机 "省份 城市 县"  例如 "福建省 南平市 光泽县"

    'date': '@datetime()', //随机时间 例如 "1982-12-03 23:27:38"
    'img': '@image()',//随机图片 例如 "http://dummyimage.com/120x60"
    'price': '@integer(1,100)'//随机价格 返回 1 到 100 整数
    "message": '@cword(6)' // 随机汉字(6个) 去掉c为字母

    "persons|100": [ // 该数组中返回 100 个下面定义的对象
      {
        "id|+1": 0, // 从 0 开始每次 +1    012345
        ...
      }
    ]
  1. 生成后端接口的方法:Mock.mock()

(1)用法1:Mock.mock(template)  ---  根据数据模板生成模拟数据。

(2)用法2:Mock.mock(rurl, template) 
         参数rurl:请求地址
         参数template:根据模板生成的数据
         
(3)用法3:Mock.mock(rurl, function(options){}) --- 记录用于生成响应数据的函数。当拦截到匹配rurl请求时,
         函数 function(options) 将被执行,并把执行结果作为响应数据返回。
         
(4)用法4:Mock.mock(rurl,rtype,template)
         参数rurl:请求地址
         参数rtype:请求方式
         参数template:根据模板生成的数据
         
(5)用法5:Mock.mock(rurl,rtype,function( options ){}) --- 记录用于生成响应数据的函数。当拦截到匹配 rurl 和 rtype          的请求时,函数 function(options) 将被执行,并把执行结果作为响应数据返回。       

五、vue2+mockjs实现CRUD

1、安装:axios、mockjs
2.创建mock接口文件:src/mock/index.js
//引入mock.js
import Mock from 'mockjs'

//查询所有
Mock.mock('/api/info','get',{
    "status":200,
    "arr|10":[{
        "id|+1":1,
        "username": "@cname",
        "isMale":'@boolean',//随机性别,
        "age|1-100": 1,
        "address":"@county(true)",
        avatar() {
            //用户头像
            return Mock.Random.image('100×100',Mock.Random.color(),'#757575','png',this.username)
        }
    }]
})


const paramsList = [
    { product: 'iphone3G', id: 1 },
    { product: 'iphone4', id: 2 },
    { product: 'iphone4S', id: 3 },
]

//增加数据接口:
Mock.mock('/api/addInfo','post',options=>{
    let body = JSON.parse(options.body) // 获取请求参数
    let id = parseInt(body.id)
    let flag = true

    for (let item of paramsList) {
        if (item.id === id) flag = false // 判断id是否已经存在
    }

    // 如果id不存在
    if (flag) {
        paramsList.push(
            {
                product: body.product,
                id
            }
        )
        return {
            paramsList,
            status: 200,
            msg: '添加成功'
        }
    }
    // 如果id已存在
    return {
        status: 400,
        msg: '添加失败,id已存在'
    }
})

//删除数据接口
Mock.mock('/api/remove', 'delete', options => {
    let id = parseInt(JSON.parse(options.body).id) // 获取请求id
    let index = null

    for (let i in paramsList) {
        if (paramsList[i].id === id) index = i // 获取id对应的index
    }

    if (index !== null) {
        console.log(`删除的id为:${id},对应的index为:${index}`)
        paramsList.splice(index, 1) // 从index开始删除一个(本身)
        return {
            paramsList,
            status: 200,
            msg: '删除成功'
        }
    }
    return {
        status: 400,
        msg: '删除失败,id不存在'
    }
})

//修改数据接口
Mock.mock('/api/edit', 'put', options => {
    const body = JSON.parse(options.body) // 解析请求参数(只能解析到这)
    const id = parseInt(body.id) // 获取请求id
    let index = null

        for (let i in paramsList) {
            if (paramsList[i].id === id) { // 判断id是否已经存在
                index = i // 拿到id对应的index
            }
        }
        
        // 如果id存在
       if(index != null){
            paramsList[index].product = body.product
            return {
                paramsList,
                status: 200,
                msg: '修改成功'
            }
       }
        return {
            status: 400,
            msg: '修改失败'
        }
})
  1. 在main.js文件中引入mock接口文件

  1. 在vue组件中请求mockjs生成的数据

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <br/><br/>
    <button @click="getData">查询所有</button>
    &nbsp; &nbsp; &nbsp;
    <button @click="addData">增加数据</button>
    &nbsp; &nbsp; &nbsp;
    <button @click="delData">删除数据</button>
    &nbsp; &nbsp; &nbsp;
    <button @click="editData">修改数据</button>
  </div>
</template>

<script>
export default {
  name: 'App',
  
  methods: {
    getData(){
      this.$http.get('/api/info').then(res=>{
        console.log(res.data.arr)
      })
    },
    addData(){
      this.$http.post('/api/addInfo',{
        product: 'iphone5',
        id: 4
      }).then(res=>{
        console.log(res.data)
      }).catch(err=>{
        console.log(err)
      })
    },
    delData(){
      this.$http.delete('/api/remove',{
        data: {
          id:2
        }
      }).then(res=>{
        console.log(res.data)
      }).catch(err=>{
        console.log(err)
      })
    },
    editData(){
      this.$http.put('/api/edit', {
          data: {
            id: 1, // 要修改的id
            product: 'iphone12' // 修改的内容
          }
        }
      }).then(res => {
        console.log(res.data)
      }).catch(err => {
            console.log(err)
      })
    }
  }
}
</script>

六、随机生成数据的方法:Mock.Random函数

//引入
import Mock from 'mockjs'
const Random = Mock.Random

1、生成随机域名(每次运行结果不同):
   Random.domain()

2、生成随机IP(每次运行结果不同)
   Random.ip() 

3、生成随机URL(每次运行结果不同)
   Random.url() 
   
4、生成随机省份:
   Random.province() 
   
5、生成随机城市:
   Random.city() 
   
6、生成在某个省份的某个城市:
   Random.city(true)
   
7、生成一条随机的中文句子
   Random.csentence()
   
8、模拟颜色数据:
   Random.rgba()  // "rgba(122, 121, 242, 0.13)
   
9、模拟日期/时间数据:
  (1)日期:
     Random.date('yyyy-MM-dd')  // "1975-04-27"
     Random.date('yy-MM-dd')    //   "00-01-08"
  (2)时间:
     Random.time()   // "05:06:06"
     
10、模拟全名:
   Random.cname()   // "黄秀英"
   
11、模拟姓氏:
   Random.cfirst()   // "龙"
   
12、模拟名字
   Random.clast()  // "秀英"
   
13、模拟图片:
    Random.image('200x100', '#4A7BF7', 'Hello') // 不指定参数则取随机的宽高并显示对应的宽高数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194153.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【实际开发12】- Utils / tools

目录 1. 自定义工具类 概念 / 解析 1. 构建方式 1. XxxClassl 类 public xxx() → new XxxClass() 2. XxxClassl 类 public static xxx() → XxxClass.xxx() 2. Interface 1. public interface XxxMapper → private final XxxMapper 2. public interface IXxxService →…

面经八,笔试加面试

Java 开发面试题&#xff0c;尧壁信科有限公司 笔试&#xff1a; 1、Java 中有几种类型的流&#xff1f; 字节流字符流&#xff0c;输入流输出流 2、什么是 java反射? 在程序的运行状态中&#xff0c;对于任意一个类&#xff0c;都可以知道整这个类的所有属性和方法&#xf…

如何锁定Excel表格的公式不被修改

很多小伙伴在制作Excel表格的时候&#xff0c;往往还会设置很多公式&#xff0c;但如果不小心或被他人随意修改了公式&#xff0c;就会造成数据错误&#xff0c;为了避免这种情况&#xff0c;其实我们可以设置保护&#xff0c;让公式锁定无法被修改。 下面举一个例子来看看如何…

【C语言 数据结构】串

文章目录串类型的定义串的表示和实现定长顺序存储堆分配存储表示串的块链存储表示串的模式匹配算法字串的定位函数匹配模式的改进算法串类型的定义 对于由多个字符&#xff08;≥ 0&#xff09;组成的字符串&#xff08;例如 http://data.biancheng.net&#xff09;&#xff0…

Git版本如何使用命令进行升级(win10)

1、桌面鼠标右键&#xff0c;点击Git Bash Here,输入git --version 查看目前Git版本。 2、输入git update-git-for-windows 升级版本&#xff0c;再输入y同意升级并覆盖之前的版本。 我在版本升级的过程中遇到了error: RPC failed&#xff1b; curl 92 HTTP/2 stream 0 was not…

SaaS-API越权漏洞检测系统

概述通过替换认证信息后重放请求&#xff0c;并对比数据包结果&#xff0c;判断接口是否存在越权漏洞特点支持HTTPS自动过滤图片/js/css/html页面等静态内容多线程检测&#xff0c;避免阻塞支持输出报表与完整的URL、请求、响应安装和使用安装依赖git clone https://github.co…

Eyeshot 2023 测试版,离发行版不远了

Eyeshot 2023 测试版 这个 Beta 版本来得太晚了&#xff0c;因为我们决定放弃许多客户不喜欢的 v2022 GEntities。该产品已根据以下架构进行了完全重构。例如&#xff0c;使用 Eyeshot 2023 可以非常轻松地在 Web 项目中使用没有 UI 的产品。这也简化了从 Eyeshot 2021 版的项…

【软件测试】6年资深测试总结的,测试人常常犯的9大误区,背锅不存在的......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 1、把原型设计、UI效…

Chapter3:机器人系统设计

ROS1{\rm ROS1}ROS1的基础及应用&#xff0c;基于古月的课&#xff0c;各位可以去看&#xff0c;基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。 ROS{\rm ROS}ROS版本&#xff1a;ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic&#xff1b;实际机器人&#xff1a;Ha…

无忧·企业文档自助配置完成单点登录配置,对接企业原有组织架构

我作为企业文档的产品负责人&#xff0c;常常被问及企业文档和其他在线文档有啥差不一样的地方&#xff1f;我大致总结了下&#xff0c;有几个方面&#xff1a;1、企业文档定位于企业内部的内容管理工具&#xff0c;侧重于私有化部署。核心的是数据的控制权在企业自己手中&…

类和对象-对象特性

前言&#xff1a;主要讲述对象的初始化与清理&#xff0c;构造函数与析构函数&#xff0c;其分类和调用&#xff0c;以及调用时机等相关内容对象的初始化与清理&#xff1a;1.生活中我们买的电子产品都基本会有出厂设置&#xff0c;在某一天我们不用的时候也会删除一些自己的信…

Java基础多线程下篇

本篇本文目录:一.线程死锁1.重入锁2.释放锁3.死锁4.wait和notify二.锁1.ReentrantLock2.Condition3.ReadWriteLock4.StampedLock5.Semaphore6.线程并发安全(1) concurrent(2) atomic三.线程池1.通过线程池分配线程2.FixedThreadPool3.CachedThreadPool4.ScheduledThreadPool四.…

粒子输运的蒙特卡罗方法介绍

蒙特卡罗大部分改概念和方法不依赖空间的维度&#xff0c;可以先讨论一维情况下粒子的蒙特卡罗输运。单能粒子输运的玻尔兹曼方程可以写为&#xff1a;仅考虑散射和吸收EtEsEa吸收意味着粒子生命周期的终结。图2.1示例&#xff1a;通过蒙特卡罗方法确定目标几何体内外的中子分布…

宕机了,Redis 如何避免数据丢失?

前言 如果有人问你&#xff1a;"你会把 Redis 用在什么业务场景下&#xff1f;" 我想你大概率会说&#xff1a;"我会把它当作缓存使用&#xff0c;因为它把后端数据库中的数据存储在内存中&#xff0c;然后直接从内存中读取数据&#xff0c;响应速度会非常快。…

机器学习实战(第二版)读书笔记(5)——Embedding

一、使用范围(作者经验)&#xff1a; 类别 < 10 通常采用独热编码方式。类别 > 50( 通常这种情况需要使用哈希桶)&#xff0c;通常最好使用嵌入。10 - 50 可以尝试两种方式&#xff0c;选择最优。 目的&#xff1a;同义词具有非常接近的嵌入&#xff08;将嵌入向量当作嵌…

股票接口自动下单怎么处理?

股票接口自动下单怎么处理的&#xff1f;经过小编的小编的了解&#xff0c;股票交易接口是由很多资源和开发源码的设计来构建的&#xff0c;有的专业开发团队将这些开发研究和完善&#xff0c;但是&#xff0c;这些股票接口不一定就是由其自身提供的&#xff0c;可以是投资者个…

C语言基础(一)—— C语言概述(领域、编译过程、IDE)

1. 什么是C语言语言是人和人交流&#xff0c;C语言就是人和计算机交流的一种语言2. 为什么要学习C语言2.1 C语言特点优点&#xff1a;代码量小执行速度快功能强大编程自由缺点&#xff1a;写代码实现周期长可移植性较差过于自由&#xff0c;经验不足易出错对平台库依赖较多2.2 …

Hystrix执行时内部原理

Hystrix最基本的支持高可用的技术资源隔离和限流。创建command,执行这个command,配置这个command对应的group和线程池。这里分析一下开始执行这个command,调用了这个command的execute()方法之后,Hystrix底层的执行流程和步骤以及原理是什么。整个8大步骤的流程图: 步骤一:…

Hive(6):数据定义语言(DDL)案例

1 原生数据类型案例 文件archer.txt中记录了相关信息&#xff0c;内容如下所示&#xff0c;其中字段之间分隔符为制表符\t,要求在Hive中建表映射成功该文件。 1 后羿 5986 1784 396 336 remotely archer 2 马可波罗 5584 200 362 344 remotely archer 3 鲁班七号 5989 1756 4…

JVM笔记(5)—— 运行时数据区—— 方法区

上一篇&#xff1a;JVM笔记&#xff08;4&#xff09;—— 运行时数据区——堆空间 一、栈、堆、方法区的交互关系 进程运行过程中&#xff0c;在方法中创建对象时通过方法区中的类型信息在堆中创建对应的对象&#xff0c;对象中又存有指向方法区中对应类型信息的指针&#xf…