【mock】后端不来过夜半,闲敲mock落灯花 (mockjs+Vuex+Vue实战)

2023-10-19 07:40

本文主要是介绍【mock】后端不来过夜半,闲敲mock落灯花 (mockjs+Vuex+Vue实战),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

mock的由来【假】

 
赵师秀:南宋时期的一位前端工程师
诗词背景:在一个梅雨纷纷的夜晚,正处于项目编码阶段,书童却带来消息:写后端的李秀才在几个时辰前就赶往临安度假去了,!此时手头仅有一个简单的数据接口文档的赵师秀慨叹一声:"好吧,那还是我自己先模拟一下后端的接口吧"
 
_(:3 」∠)_  再后来,就有了那句千古名句啦~~( 为了表示对赵师秀先生的歉意,文末我将附上原文)
 
如果我说这就是前后端分离思想和mock.js的由来,你会信么?(ฅ´ω`ฅ)
 

mock的由来【真】

我们在Vue或React的文档里时不时就会看到这个名词,那么mock到底是什么东西呢?
 
mock有“愚弄、欺骗”之意,在前端领域,mock可以理解为我们前端开发人员制造的假数据。也就是说不是由后台真实制造,而是由我们其他一些方式模拟的数据,例如借助mock.js。
 
通过这种方式,我们能在一定程度上实现前后端分离的开发流程。因为如果前端开发人员能够自己模拟数据的话,就不必等着拿到后端的接口才能完成剩下的工作,使得前端人员独立开发的能力增强,在此基础上做到前端后台各自独立的开发(当然这个前提是有写好详细地公共数据接口的文档)
最后对接的工作是前后端联调数据,因为前端mock的辅助,我们尽可能地减少了前后端对接过程中的效率损耗
   
 

mock.js初上手——安装和使用

在终端里通过运行npm install mockjs去安装mock.js模块,安装成功后你就可以通过模块化的方式去使用模块化的方式去使用mock了,下面这个是官方文档的小例子:
var Mock = require('mockjs')
var data = Mock.mock({// 属性 list 的值是一个数组,其中含有 1 到 10 个元素'list|1-10': [{// 属性 id 是一个自增数,起始值为 1,每次增 1'id|+1': 1}]
})
// 输出结果
console.log(JSON.stringify(data, null, 4))

 

demo:

 

mock.js抢鲜看——主要的作用和API

 

mock.js的作用

mock.js的作用,从它文档的首页介绍便可以略知一二:

1.它可以生成大量不同类型的模板数据,从最基本的随机数组/数字/对象/字符串,再到一个域名,一个地址(省/市),一个标题,一段文字,甚至给定宽高和颜色的图片,它都能模拟生成! 这就是mock.js的强大之处
 
2. 相比起生成随机的模拟数据,其实我们更关心的是当我们发送Ajax请求的时候,我们能够接收到这些数据,这就是mock.js的第二大作用:拦截Ajax请求,当你对一个mock.js所指定的URL发起Ajax请求的时候,mock.js会将1中的模板数据作为响应数据回传给你,从而让你开发能在相当于已经拿到后端接口的前提下进行前端开发!
【注意】:mock.js只拦截Ajax,而不是fetch,所以,习惯于使用fetch的API的朋友们要注意了
 
mock的API其实非常简单,主要要用到的API其实就两个(我是说主要哈~~):
1.Mock.Random
这是一个对象,对象里包含许多可供调用的方法,返回相应的模拟数据,例如Mock.Random.domain() 可以返回一个随机的域名,Mock.Random.csentence() 可以返回一个随机的中文句子
2.Mock.mock([你发起Ajax请求的URL], ["get"或"post"],[根据Mock.Random定制的模板或函数])
调用这个方法后你就可以发起Ajax请求并且接收到你私人定制的随机数据啦!
【注意】前两个参数是字符串,最后一个参数是对象或函数
 
所以下面我就主要围绕这两点展开

Mock.Random的运用

模拟Web数据:
生成随机域名(每次运行结果不同):
var Random = Mock.Random
Random.domain()  //   "nhou.org.cn"

 

生成随机IP(每次运行结果不同)
var Random = Mock.Random
Random.ip()   //  "74.97.41.159"

 

生成随机URL(每次运行结果不同)
Random.url()  //   "news://wrmt.na/rbcgbws"

 

模拟地理位置数据:
生成随机省份:
var Random = Mock.Random
Random.province()  //"海南省"

 

生成随机城市:
var Random = Mock.Random
Random.city()   // "澳门半岛"

 

生成在某个省份的某个城市:
var Random = Mock.Random
Random.city(true) // "广东省 广州市"

 

模拟文本数据:
生成一条随机的中文句子:
var Random = Mock.Random
Random.csentence()   //  "会候权以解包党心要按总场火义国而片精。"

 

【注意】
1.默认一条句子里的汉字个数在12和18之间
2. 通过Random.csentence( length )指定句子的汉字个数:
Random.csentence(5)  // "文斗领拉米。"

 

3.通过Random.csentence( min?, max? )指定句子汉字个数的范围:
Random.csentence(3, 5)  // "住验住"

 

生成随机的中文段落:
var Random = Mock.Random
Random.cparagraph()  
// "电力速率离老五准东其引是外适只王。体区先手天里己车发很指一照委争本。究利天易里根干铁多而提造干下志维。级素一门件一压路低表且太马。"

 

【注意】
1. cparagraph可以看作是多条csentence以逗号连接后的字符串,默认条数为 3 到 7条csentence
2.通过Random.cparagraph(length )指定句子的个数
Random.cparagraph(2) 

 

// "而易除应精基还主局按选际复格从导。天第们国分比积造业王该回过白亲。"
3.通过Random.cparagraph(min?, max?)指定句子的个数的范围:
Random.cparagraph(1, 3)

 

//  "作养装军头确应当号天革来人车号把文。证细专物转民相解状律极或经较把马。其省级支际标业强龙算建物况。"
 
模拟颜色数据:
var Random = Mock.Random
Random.rgba()  // "rgba(122, 121, 242, 0.13)"

 

模拟日期/时间数据:
日期:
Random.date('yyyy-MM-dd')  // "1975-04-27"
Random.date('yy-MM-dd')    //   "00-01-08"

 

时间:
Random.time()   // "05:06:06"

 

模拟图片:
Random.image('200x100', '#4A7BF7', 'Hello')

 

 

不指定参数则取随机的宽高并显示对应的宽高数据:
 

 

模拟姓名数据:
模拟全名:
Random.cname()   // "黄秀英"

 

模拟姓氏:
Random.cfirst()   // "龙"

 

模拟名字
Random.clast()  // "秀英"

 

Mock.mock()的运用

除了制造模拟数据之外,更关键的是,我们发起Ajax请求的时候要能够接收到这些数据呀。嘿嘿,这就是Mock.mock()的作用啦!
上面我介绍过Mock.mock()的用法,如下:
Mock.mock([你发起Ajax请求的URL], ["get"或"post"],[根据Mock.Random定制的模板或函数])
在文章开头的时候,我们通过使用mock函数的第三个参数生成了对应的模拟数据:
var data = Mock([模板参数]);
但如果我们希望这个数据能够被请求某个URL的ajax接收到,那就要运用到前两个参数了:
用例如下:
[注意] 为了在Vue中使用Ajax,我注册了一个插件:Vue-Resource,关于更多可以参考Vue-Resource的官方文档:https://github.com/pagekit/vue-resource/blob/develop/docs/config.md
import Vue from 'vue'//注册Vue-Resource插件,这样我们就可以Vue.http.get(URL)去发出Ajax请求了
import VueResource from 'vue-resource'
Vue.use(VueResource)var Mock = require('mockjs')
Mock.mock('/penghuwan.com/', 'get', {// 属性 list 的值是一个数组,其中含有 1 到 10 个元素'list|1-10': [{// 属性 id 是一个自增数,起始值为 1,每次增 1'id|+1': 1}]
})
// 输出结果
 
Vue.http.get('/penghuwan.com/').then(response => {console.log(response.body)}
)

demo:

 

 

 

Mock.js小练兵——用Vue + Vuex + mockjs搭建一个简单的文章Feed

下面,我将用用Vue + Vuex + mockjs搭建一个简单的应用,展示前后端分离的工作流程
先看看我们最终要达到的效果,这是UI的最小单元:

 

我们希望能显示多个文章卡片,并且向其中插入mockjs模拟的内容
 
我的主要文件有四个:
├── app.vue          // 页面UI
├── main.js            // 入口文件,初始化vuex和vue-resource,并挂载mockjs
├── mock.js           // 生成模拟数据
└── module.js        // vuex的module部分
app.vue:
<template><div id="app"><template v-for ="(item, index) in articles"><div :key="index"><h1 class="title">{{ item.title }}</h1><div>{{ item.content }}</div><div><p class="time">{{ '发表时间:' +  item.time}}</p><p class="location">{{ '发表地址: ' + item.location }}</p></div></div></template></div>
</template>
 
<script>
import { mapGetters, mapActions } from 'vuex'export default {mounted: function () {this.fetchData()},methods: {...mapActions({fetchData: 'fetchArticlesData'})},computed: {...mapGetters({articles: 'getArticles'})}
}
</script>
 
<style scoped>#app div{border: 1px solid gray;padding: 10px;margin: 10px;overflow: hidden;}#app p{margin: 0px;}.title{font-size: 16px;}.time{float: left;}.location{float: right;}
</style>

 

入口文件main.js:
import Vue from 'vue'
import Vuex from 'vuex'
import VueResource from 'vue-resource'import App from './app'
import article from './module.js'Vue.use(Vuex)
Vue.use(VueResource)// 调用mock的API,使Ajax能够捕获随机数据
require('./mock.js')
// 创建Vuex的store
const store = new Vuex.Store({modules: {article}
})new Vue({el: '#app',template: '<App />',store: store,components: { App }
})

 

 
mock.js:
var Mock = require('mockjs')
var Random = Mock.Randomconst produceData = function () {let articles = []for (let i = 0; i < 10; i++) {let newArticleObject = {title: Random.csentence(5),content: Random.cparagraph(5, 7),time: Random.date() + ' ' + Random.time(),location: Random.city()}articles.push(newArticleObject)}return {articles: articles}
}
// 第三个参数可以是对象也可以是返回对象的函数
Mock.mock('/article', 'get', produceData)

 

module.js:
import Vue from 'vue'const RESQUEST_ARTICLES = 'RESQUEST_ARTICLES'export default {state: {articles: []},getters: {getArticles: state => state.articles},actions: {fetchArticlesData (context) {context.commit(RESQUEST_ARTICLES)}},mutations: {[RESQUEST_ARTICLES] (state) {Vue.http.get('/article').then(response => {let data = response.bodystate.articles = data.articles})}}
}

 

demo:

 

再刷新一次看看!!:
 

 

【完】

 

 
黄梅时节家家雨,青草池塘处处蛙。有约不来过夜半,闲敲棋子落灯花
 
参考资料:
1.mock.js官方文档: http://mockjs.com/
2.vue-resource官方文档: https://github.com/pagekit/vue-resource
3.vuex中文文档: https://vuex.vuejs.org/zh-cn/
 
 

 

这篇关于【mock】后端不来过夜半,闲敲mock落灯花 (mockjs+Vuex+Vue实战)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/238338

相关文章

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.