首页 > 其他分享 >Vue.js 教程:如何使用 Mock.js 进行前端开发

Vue.js 教程:如何使用 Mock.js 进行前端开发

时间:2023-05-04 17:35:40浏览次数:50  
标签:Vue url list js Ajax API 前端开发 Mock

Mock.js 是常用的生成随机数据,拦截 Ajax 请求的 JavaScript 库。在软件开发的初期,后端 API 接口可能还没有实现或者还没有完全实现。在这种情况下,用 Mock.js 可以模拟后端 API 供前端开发人员调用,从而避免等待后端 API 的完成。

要在 Vue 项目中使用 Mock.js 有两个思路:

  1. 在客户端拦截 Ajax。用 Mock.js 拦截 Ajax 请求,返回 Mock.js 生成的随机数据。
  2. 在服务器端返回 Mock 数据。后端在 API 还没开发好前,返回 Mock.js 生成的随机数据。

知识扩展:了解 Mock.js 的语法规范

下面我们来具体看一下。

方法1: 在客户端拦截 Ajax

使用 Mock.js 需要安装依赖:

npm install mockjs --save

用 Mock.mock(url, template) 可以拦截 Ajax 请求,并返回数据。 当拦截到匹配 url 的 Ajax 请求时,将根据数据模板 template 生成模拟数据,并作为响应数据返回。如果未拦截到匹配,则还是走正常的接口调用。

比如,调 API /user/list 时,随机返回用户列表数据:

import Mock from 'mockjs'
Mock.mock('/user/list', {
    // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
    'list|1-10': [{
        'id|+1': 1, // id 从 1 开始自增。
        'name': '@cname', // 随机中文名
        'age|15-25': 1,  // 15~25 的随机数
        'city': '@county(true)' // 随机的城市
    }]
})

调用该 API 时,返回值类似这样:

{
"list": [
{
"id": 1,
"name": "Susan Smith",
"age": 20,
"city": "New York City, New York"
},
{
"id": 2,
"name": "Emily Johnson",
"age": 24,
"city": "Los Angeles, California"
},
{
"id": 3,
"name": "Andrew Davis",
"age": 25,
"city": "Chicago, Illinois"
}
]
}

当然,有时 Mock 的场景比较复杂。需要根据 API 的参数,来动态返回数据。此时,可以用 Mock.mock(url, function( options))。 当拦截到匹配 url 时,函数 function(options) 将被执行,并把执行结果作为响应数据返回。其中,函数的参数 options指向本次请求的 Ajax 选项集,含有 urltype 和 body 三个属性,参见 XMLHttpRequest 规范

如果要匹配相同 url 的不同 method,可以用Mock.mock(url, method,function( options))。第二个参数是 method。只有同时配置到url 和 method 时,拦截才会生效。

方法2: 在服务器端返回 Mock

这里的服务器端用 Node.js。 Node.js 安装比较容易,下载安装包(这里)安装就行了,这里就不赘述了。

服务器端处理接口请求,我们用 基于 Node.js 的轻量级 Web 框架 Express。安装:

$ npm install express --save

处理请求,并返回 Mock 数据:

const express = require('express')
const Mock = require('mockjs')

const app = express()

const useMock = true
app.get('/user/list', (req, res) => {
  if (useMock) {
    const list = Mock.mock({
        'list|1-10': [{
            'id|+1': 1, // id 从 1 开始自增。
            'name': '@cname', // 随机中文名
            'age|15-25': 1,  // 15~25 的随机数
            'city': '@county(true)' // 随机的城市
        }]
    })
    res.send(list)
    return
  }
  // ...res.send(正常的业务逻辑返回数据)
})

调用该 API 时,返回值和 方法1 的一样。

处理根据 API 的参数,来动态返回数据的场景。只需在上面代码的路由处理函数中加逻辑即可。请求的信息可以在 req 对象上获得。

要处理相同 url 的不同 method,只需添加不同的路由即可。上面的代码,只匹配 method 是 get 的。

总结

本文总结了在 Vue 项目中使用 Mock.js 有两种方法。方法1 的优点是使用简单。方法2 的优点是灵活和对前端代码的侵入性低,但要学习一点 Node.js 知识。

想进阶成为一位 Mock 高手吗?或许你可以看这篇实操,帮助你学习,语法完全兼容 Mock.js, 并扩展了一些 Mock.js 没有的语法(如国内手机号 @phone)。

标签:Vue,url,list,js,Ajax,API,前端开发,Mock
From: https://blog.51cto.com/u_15964010/6243654

相关文章

  • vue中scoped 在文件引入中的作用
    首先搞清楚scoped是干啥的?scoped的引入主要是上线了样式的模块化私有化,即当前组件的样式只对当前组件起作用。当vue组件被vue-loader解析的时候,对于style上加了scope属性的组件,会主动加上data-v-xx的属性来唯一标识当前组件,若当钱组件内部存在子组件,只有子组件的最外层会加上唯一......
  • vue this.$router.push 页面传值问题
    在修改一个别人的bug的时候发现一个问题,记录一下,vue前端页面在刷新页面后只读页面可以编辑了在前一个传值页面他的写法是this.$router.push({name:'xxx',query:{isEdit:false}});在接收的时候写的是this.isEdit=this......
  • Vue3数据无法显示/数据无法修改
    问题描述:昨天朋友问了我一个关于Vue3的问题,给他解答后,想起貌似自己当初也曾被这个问题困惑过,只不过被善用搜索引擎后找到了问题所在。现在考虑到可能有些朋友搜不到解决方法,所以现在用它的表现形式作为标题,可能更便于搜索到。现在重现一下这个问题:<divv-for="(item,idx)inl......
  • ARM Linux安装node.js和node-red
    SA515安装node.js和node-red1.先安装node.js直接官网下载ARMv7版可执行文件:https://nodejs.org/en/download当前使用的最新版本:https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-armv7l.tar.xz2.导入开发板,这里以/usrdata为例adbpushnode-v18.16.0-linux-armv7l......
  • ENOENT: no such file or directory, open 'D:\Idea lorkSpacecjccx-ui\package.js
     启动项目报找不到package.json找到你项目的package.json的路径 然后cd 这个路径 然后就解决了......
  • react.js学习笔记
    (1)      参考文献1.前端技术手册2.在线编码......
  • node.js版本更新及遇到的错
    下载你要更新的版本双击运行一直next然后如果你之前安装过node.js不用管它会覆盖安装安装好之后cmd检查版本号node -v出来版本号那就没有问题但是在启动的时候会报node不是不是内部或外部命令,也不是可运行的程序或批处理文件这个时候呢上百度说是环境的问题但......
  • JS在一个数组中过滤掉另一个数组的简易方法
    filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。every()方法使用指定函数检测数组中的所有元素:如果数组中检测到有一个元素不满足,则整个表达式返回false,且剩余的元素不会再进行检测。如果所有元素都满足条件,则返回true。当有如下需求......
  • vue 原生方法实现pc端调用摄像头全屏视频考试(实时截屏上传,并提示当前环节
    <template><div><el-row><el-col:span="10"style=""><div><el-cardstyle="margin:0;padding:0;overflow-y:auto"><divstyle="width:100......
  • # vue 使用 threejs 实现实景看房效果 demo
    vue使用threejs实现实景看房效果demo关于这个threejs实现VR看房效果也超级简单,只需要提供一个思路的话就可以了其实,首先需要一个房间结构的贴图,这个贴图网上有,当然找个合适的也不好找,我找了一上午在别人的demo里面扣了一张出来,代码都是一样的,稍微说一下思路。一张全景......