在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟


Posted in Javascript onNovember 28, 2018

在 https://3water.com/article/151520.htm这篇文章中,我们介绍了在 Angular-CLI 中引入 simple-mock 的方法。

本文以 Vue-CLI 为例介绍引入 simple-mock 实现前端开发数据模拟的步骤。

本质上这里介绍的是在 webpack-dev-server 中配置 simple-mock 实现 API Mock,所以适用于任何采用 webpack 的前端项目。

1 simple-mock 简介

simple-mock 是一个引入成本简单的 API Mcok 库,通过提供 API 方法供 node Server 调用,以帮助 node Server 实现 Mock 功能。

前端开发过程中的 API Mock 方案各种各样,但有时功能丰富的 mock 方案不一定是最适合当前开发场景的。

simple-mock 以提供 API 方法的方式实现简易的 API Mock 逻辑, 注重快速简洁。

2 在 Vue-CLI 项目中使用 simple-mock

下面以当前最新的 Vue-CLI 3 和 vuejs 2 为例,介绍引入 simple-mock 的详细流程。

2.1 在 项目中引入 simple-mock 依赖

npm i -D @lzwme/simple-mock
# or
yarn add -D @lzwme/simple-mock

2.2 在配置文件 vue.config.js 中增加代理配置项

在配置文件 vue.config.js 中增加 devServe.proxy 字段的配置。参考:

const anyParse = require("co-body");
const apiMock = require("@lzwme/simple-mock");
const chalk = require("chalk");
const proxyTarget = 'https://api.github.com/';

module.exports = {
 baseUrl: "",
 // Links: https://webpack.js.org/configuration/dev-server/
 devServer: {
 open: true,
 https: false,
 compress: true,
 disableHostCheck: true,
 // Links: https://github.com/chimurai/http-proxy-middleware
 proxy: {
 "/users": {
 target: proxyTarget,
 changeOrigin: true,
 port: 3009,
 onProxyRes(proxyRes, req, res) {
  apiMock.saveApi(req, res, proxyRes.headers["content-encoding"]);
 },
 async onProxyReq(proxyReq, req, res) {
  // 尝试解码 post 请求参数至 req.body
  if (!req.body && proxyReq.getHeader("content-type")) {
  try {
  req.body = await anyParse({ req });
  } catch (err) {
  // console.log(err);
  }
  }

  apiMock.render(req, res).then(isMocked => {
  if (!isMocked) {
  console.log(
  chalk.cyan("[apiProxy]"),
  req._parsedUrl.pathname,
  "\t",
  chalk.yellow(proxyTarget)
  );
  }
  });
 }
 }
 }
 }
};

通过以上两个步骤,即完成了 simple-mock 的引入。下面步骤主要是针对 simple-mock 使用的说明示例。

2.3 修改 simple-mock 配置文件

simple-mock 可以通过读取配置文件 simple-mock-config.js 判断 mock 的开启或关闭。该文件会在首次加载时自动创建。配置内容参考:

module.exports = {
 mockFileDir: 'mock', // path.contentlove(__dirname, 'mock'), // 指定 mock 文件存放的目录
 isEnableMock: true, // 是否开启 Mock API 功能
 isAutoSaveApi: true, // 是否自动保存远端请求的 API
 isForceSaveApi: false, // 是否强制保存,否则本地有时不再保存
 // 自动保存 API 返回内容时,对内容进行过滤的方法,返回为 true 才保存
 fnAutosaveFilter(content) {
 // 示例: 不保存空的或 404 的内容
 if (!content || content.message === 'Not Found') {
 return false;
 }
 return true;
 }
};

通过修改配置文件中的开关,即可实现 mock 功能的开启或关闭。

2.4 通过环境变量开启或关闭 Mock 功能

除了读取配置文件, simple-mock 还可以通过读取环境变量判断 mock 的开启或关闭(环境变量的优先级更高,方便将开关注入到工程化工具中)。

例如在 window 下我们可以创建如下的批处理脚本( dev-start.bat ),启动该脚本即可即时选择是否开启 mock 功能。

dev-start.bat 文件主要内容参考:

@title VUE-START-HELPER
@echo off
set NODE_ENV=development
set MOCKAPI_ENABLE=N
set MOCKAPI_AUTOSAVE=N
set MOCKAPI_AUTOSAVE_FORCE=N
set /p enablemock=Enable mockAPI?(y/):
if "%enablemock%"=="y" set MOCKAPI_ENABLE=mock
set /p autosave=Auoto Save API Data?(y/):
if "%autosave%"=="y" set MOCKAPI_AUTOSAVE=save
if "%enablemock%"=="y" goto run
set /p forcesave=Force Save API Data?(y/):
if "%forcesave%"=="y" set MOCKAPI_AUTOSAVE_FORCE=force
:run
echo =======================================================
echo MOCKAPI_ENABLE  = %MOCKAPI_ENABLE%
echo MOCKAPI_AUTOSAVE = %MOCKAPI_AUTOSAVE%
echo MOCKAPI_AUTOSAVE_FORCE = %MOCKAPI_AUTOSAVE_FORCE%
echo =======================================================
npm start

在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟

dev-start.bat 运行示例

在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟

自动保存 API 数据的文件

3 更多参考

github-user-search-vue 是基于 Vue-CLI 3 和 simple-mock 实现的一个 Github 用户搜索的示例项目,如有兴趣可前往参考。

本文的方案与在 Angular-CLI 中引入 simple-mock 在本质上是一样的,都是在 http-proxy-middleware 执行过程中,注入 simple-mock 相关 API 实现 Mock 功能。故本文的示例方法。 Vue-CLI 和 Angular-CLI 的 node Server 内部均采用 webpack-dev-server ,它使用 http-proxy-middleware 作为 HTTP 代理插件。故本文示例的方法,实际适用于任何使用 http-proxy-middleware 作为 HTTP 代理的 node server 服务。

总结

以上所述是小编给大家介绍的在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
Mootools 1.2教程 Fx.Tween的使用
Sep 15 Javascript
Javascript 八进制转义字符(8进制)
Apr 08 Javascript
浅析document.ready和window.onload的区别讲解
Dec 18 Javascript
JS操作iframe里的dom(实例讲解)
Jan 29 Javascript
JavaScript设计模式之工厂方法模式介绍
Dec 28 Javascript
jQuery使用元素属性attr赋值详解
Feb 27 Javascript
js实现添加可信站点、修改activex安全设置,禁用弹出窗口阻止程序
Aug 17 Javascript
vue 组件使用中的一些细节点
Apr 25 Javascript
Vue表单输入绑定的示例代码
Nov 01 Javascript
微信小程序云函数使用mysql数据库过程详解
Aug 07 Javascript
JS JQuery获取data-*属性值方法解析
Sep 01 jQuery
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 Vue.js
详解Vue中watch的详细用法
Nov 28 #Javascript
vscode下的vue文件格式化问题
Nov 28 #Javascript
微信小程序如何获取用户收货地址
Nov 27 #Javascript
详解vue2.0 资源文件assets和static的区别
Nov 27 #Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
Nov 27 #Javascript
js canvas实现画图、滤镜效果
Nov 27 #Javascript
js canvas画布实现高斯模糊效果
Nov 27 #Javascript
You might like
实现“上一页”和“下一页按钮
2006/10/09 PHP
五个PHP程序员工具
2008/05/26 PHP
PHP 编写大型网站问题集
2010/05/07 PHP
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
php基本函数汇总
2015/07/09 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
jquery的键盘事件修改代码
2011/02/24 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
2016/05/24 Javascript
Jquery ajax请求导出Excel表格的实现代码
2016/06/08 Javascript
BootStrap入门教程(一)之可视化布局
2016/09/19 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
员工培训心得体会
2013/12/30 职场文书
个人租房协议书
2014/04/09 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
后勤工作个人总结
2015/02/28 职场文书
python基础之文件处理知识总结
2021/05/23 Python