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

2023-10-19 07:40

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

mock.js
Mock的由来【误】

黄梅时节家家雨,青草池塘处处蛙。
后端不来过夜半,闲敲mock落灯花

**赵师秀:**南宋时期的一位前端工程师

诗词背景:在一个梅雨纷纷的夜晚,正处于项目编码阶段,书童却带来消息:“写后端的李秀才在几个时辰前就赶往临安度假去了,后端编码的进度又延后…”

此时手头仅有一个简单的http数据接口文档的赵师秀来了一套素质三连后,不由得慨叹一声:“好吧,那还是我自己先模拟一下后端的接口吧”

(:3 」∠) 再后来,就有了那句千古名句啦**~~**

( 为了表示对赵师秀先生的歉意,文末我将附上原文)

如果我说这就是前后端分离思想和mock.js的由来,你会信么?(ฅ´ω`ฅ)

mock的由来【真】

我们在Vue或React的文档里时不时就会看到这个名词,那么mock到底是什么东西呢?

mock有“愚弄、欺骗”之意,在前端领域,mock可以理解为我们前端开发人员制造的假数据。也就是说不是由后台真实制造,而是由我们其他一些方式模拟的数据,例如借助mock.js。

**通过这种方式,我们能在一定程度上实现前后端分离的开发流程。**因为如果前端开发人员能够自己模拟数据的话,就不必等着拿到后端的接口才能完成剩下的工作,使得前端人员独立开发的能力增强,在此基础上做到前端后台各自独立的开发(当然这个前提是有 “写好的+详细的+不再临时改变的” 公共数据接口的文档)

最后对接的工作是前后端联调数据,因为前端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()
// "电力速率离老五准东其引是外适只王。体区先手天里己车发很指一照委争本。究利天易里根干铁多而提造干下志维。级素一门件一压路低表且太马。"

【注意】

  • cparagraph可以看作是多条csentence以逗号连接后的字符串,默认条数为 3 到 7条csentence
  • 通过Random.cparagraph(length )指定句子的个数
Random.cparagraph(2)
// "而易除应精基还主局按选际复格从导。天第们国分比积造业王该回过白亲。"

4.通过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的官方文档

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:

再刷新一次看看!!:

【完】

黄梅时节家家雨,青草池塘处处蛙。有约不来过夜半,闲敲棋子落灯花

Mock.js的缺点

这里要说明一下的是:虽然我上述介绍的都是些Mockjs的优点,但我并没有说推荐大家使用,我的目的仅仅是向大家介绍github上有这么一个体验Mock的模块而已。

下面说下个人使用的时候感受到的Mock.js的一些缺点吧

  1. 不支持当今流行的fetch,而只支持Ajax

  2. 前后端信息交互的能力略若弱,例如传到后台的request仅能携带3种信息: type,url和body

  3. mockjs不能满足实际的使用需求: 实际上作为前端小白,我很希望mock.js能给我模拟出这样一种数据:

    [“字符串1”,“字符串2”,“字符串3”] // 三个字符串除了每次交互都不同外,也各不相同

但mockjs却只能给我提供这样一种数据

["字符串1","字符串1","字符串1"]
// 不同的交互次数,字符串1是不同的,但三个字符串都是相同的字符串1

4. 使用起来的时候发现它的最大的优点是"让展示的界面看起来很完整好看??",有点华而不实的感觉

所以,直到今天为止,mockjs在github仍然是5000多star,既不少,也不多

参考资料

  • mock.js官方文档
  • vue-resource官方文档
  • vuex中文文档

原文链接:后端不来过夜半,闲敲mock落灯花(mockjs+Vuex+Vue实战)

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



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

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

【VUE】跨域问题的概念,以及解决方法。

目录 1.跨域概念 2.解决方法 2.1 配置网络请求代理 2.2 使用@CrossOrigin 注解 2.3 通过配置文件实现跨域 2.4 添加 CorsWebFilter 来解决跨域问题 1.跨域概念 跨域问题是由于浏览器实施了同源策略,该策略要求请求的域名、协议和端口必须与提供资源的服务相同。如果不相同,则需要服务器显式地允许这种跨域请求。一般在springbo

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密