一、mock

1、简介

  mock是一个模拟数据生成器,旨在帮助前端独立于后端进行开发,帮助编写单元测试。其可模拟 Ajax 并返回模拟数据,使前端不用去调用后端的接口,方便测试。
 

2、vue直接使用mock

step1:安装mock

  1. npm install mockjs

step2:直接引入mock.js,并编写mock接口(Mock.mock)。

  1. mock.js
  2. //引入mock模块
  3. import Mock from 'mockjs';
  4.  
  5. Mock.mock('/login', { //输出数据
  6. 'name': '@name', //随机生成姓名
  7. //还可以自定义其他数据
  8. });
  9. Mock.mock('/list', { //输出数据
  10. 'name': '@name', //随机生成姓名
  11. 'age|10-20': 10
  12. //还可以自定义其他数据
  13. });

step3:在需要的地方引入编写后的接口js即可。

  1. App.vue
  2. <template>
  3. <div>
  4. <button @click="login">login</button>
  5. <button @click="list">list</button>
  6. </div>
  7. <!--App -->
  8. </template>
  9.  
  10. <script>
  11. import mock from './mock.js'
  12. import axios from 'axios'
  13. export default {
  14. methods: {
  15. login() {
  16. axios.post("/login").then(response => {
  17. if (response.data) {
  18. console.log(response.data)
  19. alert(response.data.name)
  20. }
  21. })
  22. },
  23.  
  24. list() {
  25. axios.post("/list").then(response => {
  26. if (response.data) {
  27. console.log(response.data)
  28. alert(response.data.name + ',' + response.data.age)
  29. }
  30. })
  31. }
  32. }
  33. }
  34. </script>
  35.  
  36. <style>
  37.  
  38. </style>

step4:代码与截图
  目录结构。使用vue-cli创建项目(详见https://www.cnblogs.com/l-y-h/p/11241503.html)。

完整代码

  1. main.js
  2. import Vue from 'vue'
  3. import App from './App.vue'
  4.  
  5. Vue.config.productionTip = false
  6.  
  7. new Vue({
  8. render: h => h(App),
  9. }).$mount('#app')
  10.  
  11. mock.js
  12. //引入mock模块
  13. import Mock from 'mockjs';
  14.  
  15. Mock.mock('/login', { //输出数据
  16. 'name': '@name', //随机生成姓名
  17. //还可以自定义其他数据
  18. });
  19. Mock.mock('/list', { //输出数据
  20. 'name': '@name', //随机生成姓名
  21. 'age|10-20': 10
  22. //还可以自定义其他数据
  23. });
  24.  
  25. App.vue
  26. <template>
  27. <div>
  28. <button @click="login">login</button>
  29. <button @click="list">list</button>
  30. </div>
  31. <!--App -->
  32. </template>
  33.  
  34. <script>
  35. import mock from './mock.js'
  36. import axios from 'axios'
  37. export default {
  38. methods: {
  39. login() {
  40. axios.post("/login").then(response => {
  41. if (response.data) {
  42. console.log(response.data)
  43. alert(response.data.name)
  44. }
  45. })
  46. },
  47.  
  48. list() {
  49. axios.post("/list").then(response => {
  50. if (response.data) {
  51. console.log(response.data)
  52. alert(response.data.name + ',' + response.data.age)
  53. }
  54. })
  55. }
  56. }
  57. }
  58. </script>
  59.  
  60. <style>
  61.  
  62. </style>

运行截图:
初始画面

点击login 按钮(随机产生一个人名)

点击list按钮(随机产生一个人名和年龄)

3、Vue项目中使用webpack-api-mocker进行mock

step1:安装webpack-api-mocker

  1. npm i webpack-api-mocker --save-dev

step2:编写 /mocker/index.js,用于定义mock接口

  1. 【/mocker/index.js
  2. // 使用 require 引入json文件,可以直接访问数据
  3. const appData = require('../data.json')
  4.  
  5. const proxy = {
  6. 'GET /api/login': {
  7. success: appData.login.success,
  8. message: appData.login.message
  9. },
  10. 'GET /api/list': [{
  11. id: 1,
  12. username: 'kenny',
  13. sex: 6
  14. },
  15. {
  16. id: 2,
  17. username: 'kenny',
  18. sex: 6
  19. }
  20. ],
  21. 'POST /api/post': (req, res) => {
  22. res.send({
  23. status: 'error',
  24. code: 403
  25. });
  26. },
  27. 'DELETE /api/remove': (req, res) => {
  28. res.send({
  29. status: 'ok',
  30. message: '删除成功!'
  31. });
  32. }
  33. }
  34. module.exports = proxy

step3:修改 vue.config.js 配置文件(若不存在,在项目下新建即可)

  1. vue.config.js
  2. const path = require('path')
  3. const apiMocker = require('webpack-api-mocker')
  4.  
  5. module.exports = {
  6. devServer: {
  7. before(app) {
        // 注意,此处引用的是自定义的接口文件
  8. apiMocker(app, path.resolve('./mocker/index.js'), {
  9. proxy: {
  10. '/repos/*': 'https://api.github.com/',
  11. },
  12. changeHost: true,
  13. })
  14. }
  15. }
  16. }

step4:随便定义一组 json 数据(用于测试)。

  1. {
  2. "login": {
  3. "success": "true",
  4. "message": "登陆成功"
  5. },
  6. "fileList": {
  7. "success":"true",
  8. "list":[
  9. {"fileId":"1","fileName":"a1.c","content":"content-test1"
  10. },
  11. {"fileId":"2","fileName":"a2.c","content":"content-test2"
  12. },
  13. {"fileId":"3","fileName":"a3.c","content":"content-test2"
  14. },
  15. {"fileId":"4","fileName":"a4.c","content":"content-test2"
  16. },
  17. {"fileId":"5","fileName":"a5.c","content":"content-test2"
  18. },
  19. {"fileId":"6","fileName":"a8.c","content":"content-test2"
  20. },
  21. {"fileId":"7","fileName":"a9.c","content":"content-test2"
  22. }]
  23. }
  24. }

step5:完整代码、截图
文件目录结构:

完整代码

  1. main.js
  2. import Vue from 'vue'
  3. import App from './App.vue'
  4.  
  5. Vue.config.productionTip = false
  6.  
  7. new Vue({
  8. render: h => h(App),
  9. }).$mount('#app')
  10.  
  11. App.vue
  12. <template>
  13. <div>
  14. <button @click="login">login</button>
  15. <button @click="list">list</button>
  16. <button @click="post">post</button>
  17. <button @click="remove">remove</button>
  18. </div>
  19. <!--App -->
  20. </template>
  21.  
  22. <script>
  23. import axios from 'axios'
  24. export default {
  25. methods: {
  26. login() {
  27. axios.get("/api/login").then(response => {
  28. if (response.data) {
  29. console.log(response.data)
  30. alert(response.data.success + ',' + response.data.message)
  31. }
  32. })
  33. },
  34.  
  35. list() {
  36. axios.get("/api/list").then(response => {
  37. if (response.data) {
  38. console.log(response.data)
  39. let list1 = response.data[0].id + ',' + response.data[0].sex + ',' + response.data[0].username
  40. let list2 = response.data[1].id + ',' + response.data[1].sex + ',' + response.data[1].username
  41. alert(list1 + '\n' + list2)
  42. }
  43. })
  44. },
  45.  
  46. post() {
  47. axios.post("/api/post").then(response => {
  48. if (response.data) {
  49. console.log(response.data)
  50. alert(response.data.status + ',' + response.data.code)
  51. }
  52. })
  53. },
  54.  
  55. remove() {
  56. axios.delete("/api/remove").then(response => {
  57. if (response.data) {
  58. console.log(response.data)
  59. alert(response.data.status + ',' + response.data.message)
  60. }
  61. })
  62. }
  63. }
  64. }
  65. </script>
  66.  
  67. <style>
  68.  
  69. </style>
  70.  
  71. data.json
  72. {
  73. "login": {
  74. "success": "true",
  75. "message": "登录成功"
  76. },
  77. "fileList": {
  78. "success":"true",
  79. "list":[
  80. {"fileId":"1","fileName":"a1.c","content":"content-test1"
  81. },
  82. {"fileId":"2","fileName":"a2.c","content":"content-test2"
  83. },
  84. {"fileId":"3","fileName":"a3.c","content":"content-test2"
  85. },
  86. {"fileId":"4","fileName":"a4.c","content":"content-test2"
  87. },
  88. {"fileId":"5","fileName":"a5.c","content":"content-test2"
  89. },
  90. {"fileId":"6","fileName":"a8.c","content":"content-test2"
  91. },
  92. {"fileId":"7","fileName":"a9.c","content":"content-test2"
  93. }]
  94. }
  95. }
  96.  
  97. vue.config.js
  98. const path = require('path')
  99. const apiMocker = require('webpack-api-mocker')
  100.  
  101. module.exports = {
  102. devServer: {
  103. before(app) {
  104. // path.resolve 引入mock
  105. apiMocker(app, path.resolve('./mocker/index.js'), {
  106. proxy: {
  107. '/repos/*': 'https://api.github.com/',
  108. },
  109. changeHost: true
  110. })
  111. }
  112. }
  113. }
  114.  
  115. 【/mocker/index.js
  116. // 使用 require 引入json文件,可以直接访问数据
  117. const appData = require('../data.json')
  118.  
  119. const proxy = {
  120. 'GET /api/login': {
  121. success: appData.login.success,
  122. message: appData.login.message
  123. },
  124. 'GET /api/list': [{
  125. id: 1,
  126. username: 'kenny',
  127. sex: 6
  128. },
  129. {
  130. id: 2,
  131. username: 'kenny',
  132. sex: 6
  133. }
  134. ],
  135. 'POST /api/post': (req, res) => {
  136. res.send({
  137. status: 'error',
  138. code: 403
  139. });
  140. },
  141. 'DELETE /api/remove': (req, res) => {
  142. res.send({
  143. status: 'ok',
  144. message: '删除成功!'
  145. });
  146. }
  147. }
  148. module.exports = proxy

运行截图:
点击 login 按钮

点击 list 按钮

点击 post 按钮

点击remove按钮

vue关于mock的简单使用的更多相关文章

  1. vue.js+webpack在一个简单实例中的使用过程demo

    这里主要记录vue.js+webpack在一个简单实例中的使用过程 说明:本次搭建基于Win 7平台 Node.js 安装官网提供了支持多种平台的的LTS版本下载,我们根据需要来进行下载安装.对于Wi ...

  2. vue双向数据绑定的简单实现

    vue双向数据绑定的简单实现 参考教程:链接 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  3. 一个基于 easyui, vue 和 maptalks 的简单地图应用

    一个基于 easyui, vue 和 maptalks 的简单地图应用 做了一个小应用,结合 easyui , vue 和 maptalks 的简单的地图应用.可以用来画图,什么的. 地址

  4. Vue如何mock数据模拟Ajax请求

    我们在做一个项目时前期可能没有后端提供接口模拟数据,那么作为前端就需要自己写json文件模拟数据加载.网上往往参考的都是不全面的,比如get请求没问题但是post请求就报错了.在Vue中只需要vue- ...

  5. vue.js最最最最简单实例

    vue.js最最最最简单实例 一.总结 一句话总结: 1.vue.js实现实现数据的双向绑定用的是什么标记? 双大括号:比如{{message}} 2.vue数据循环输出的标记是什么? 用的是标签的v ...

  6. vue从mock数据过渡到使用后台接口

    说明: 最近在搭建一个前端使用vue-element-admin,后端使用springBoot的项目. 由于vue-element-admin使用的是mock的模拟数据跑起来的项目,所以在开发过程中难 ...

  7. 总结Vue第一天:简单介绍、基本常用知识、辅助函数

    总结Vue第一天:简单介绍.基本常用知识.辅助函数 中文官网:https://cn.vuejs.org/v2/guide/syntax.html 遇到不熟悉的可以先看一下官网,然后再看一下一些别人写的 ...

  8. vue中用mock制造模拟接口(本文主要解决坑),一定要看完哦

    最近新入职一家公司,后端造接口速度很慢,想来想去还是搞一套模拟接口,来满足开发需求,有人会问,我造一个死数据不就可以了吗?或者说,后端数据结构都没出来,字段我怎么定? 问这个问题的人不奇怪,我之前也有 ...

  9. 深入浅出的webpack4构建工具--webpack4+vue+vuex+mock模拟后台数据(十九)

    mock的官网文档 mock官网 关于mockjs的优点,官网这样描述它:1)可以前后端分离.2)增加单元测试的真实性(通过随机数据,模拟各种场景).3)开发无侵入(不需要修改既有代码,就可以拦截 A ...

随机推荐

  1. 一起学Vue之入门篇

    概述 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还 ...

  2. WinForm自定义控件之DefaultValue的误解

    DefaultValue,顾名思义,默认值的意思.但这个默认值不是用来显示的,它的作用是当属性设置的值(无法代码写还是属性窗口输入)与DefaultValue相同时,会区别显示,比如其它值加粗,Def ...

  3. inux 磁盘监控分析

    一.查看磁盘空间  1. df -h Size 分割区总容量 Used 已使用的大小 Avail 剩下的大小 Use% 使用的百分比 Mounted on 路径地址 2.查看目录的空间 du -sh  ...

  4. CentOS7下部署java+tomcat+mysql项目及遇到的坑

    CentOS 7 下安装部署java+tomcat+mysql 前置:CentOS7安装:https://jingyan.baidu.com/article/b7001fe1d1d8380e7382d ...

  5. docker网络配置

    Docker网络配置 Docker网络模式介绍 Docker在创建容器时有四种网络模式:bridge/host/container/none,bridge为默认不需要用--net去指定,其他三种模式需 ...

  6. LINUX OS EXERCISE 08

    1 配置crontab计划任务时,记录的格式是什么? 分钟 小时 日期 月份 星期 可执行语句 2 配置crontab计划任务实例. 以root用户身份添加计划任务,每天早上7:30启动sshd服务, ...

  7. openwrt_在PPPOE上网的同时_访问光猫

    openwrt_在PPPOE上网的同时_访问光猫 转载注明来源: 本文链接 来自osnosn的博客,写于 2019-11-14. 参考文章: 光猫桥接模式下,通过路由器访问光猫.简单设置 设置Open ...

  8. java中线程的几种实现方式

    1. 继承Thread类来实现 class MyThread extends Thread{ @Override public void run() { System.out.println(&quo ...

  9. 计算几何 val.2

    目录 计算几何 val.2 几何单位结构体板子 旋转卡壳 基础概念 求法 模板 半平面交 前置芝士:线段交 S&I算法 模板 最小圆覆盖 随机增量法 时间复杂度 模板 后记 计算几何 val. ...

  10. logback日志文件位置动态指定

    logback日志文件位置动态指定 参考:https://stackoverflow.com/questions/19518843/logback-configuration-via-jvm-argu ...