现在开发已经是前后端分离了,前端和后端可以同时进行开发,互不影响,但是有些时候后端开发的接口慢于前端,导致前端需要等待后端的接口完成才能完成前后端对接,为了解决这个痛点,出现了模拟接口数据的方案,目前行业中主要有四种方案来模拟后端放回的数据:

  • 暴力式,直接在前端代码中写入模拟数据,但是这种缺点很明显,改变了代码的原有逻辑,嵌入式太深,耦合性搞
  • 拦截式,这就是本文主要推荐的方式,通过拦截ajax请求,然后重定向到项目中的某个js文件,从js文件中获取各种伪造的数据
  • Mock Server,就是搭建一个Mock服务器来模拟数据,根据这个服务器来生产需要的接口数据,很显然这种成本有点高,不适合任何人,特别是大型的团队,文档的编写,接口的变更,通知到每一个人,代价就比较大了
  • Mock 平台,比如市面上RAP,但是需要后端使用他,未必所有的后端都愿意使用他

Mock.js:生成随机数据,拦截 Ajax 请求,Mock.js 通过覆盖和模拟原生 XMLHttpRequest 的行为来拦截 Ajax 请求,“转发”到本地文件,所谓转发,其实就是读取本地 mock文件,并以json或者script等格式返回给浏览器。



Mock.js具有以下几个特点:

  • 让前端攻城师独立于后端进行开发,前后端可以同时进行。
  • 不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。
  • 支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。
  • 通过随机数据,模拟各种场景。

安装

# 推荐通过npm安装
npm install mockjs

使用示例

// 首先在js文件中引进
var Mock = require('mockjs')
var data = Mock.mock({
// 属性 list 的值是一个数组,其中含有 1 到 10 个元素
'list|1-10': [{
// 属性 id 是一个自增数,起始值为 1,每次增 1
'id|+1': 1
}]
})

语法

主要可以分成以下两个方面:

  • 数据模板定义规范
  • 据占位符定义规范

数据模板中的每个属性由 3 部分构成:属性名、生成规则、属性值:'name|rule': value

  • 'name|min-max': string=>通过重复 string 生成一个字符串,重复次数大于等于 min,小于等于 max)
  • 'name|count': string=>通过重复 string 生成一个字符串,重复次数等于 count
  • 'name|+1': number=>属性值自动加 1,初始值为 number
  • 'name|min-max': number=>生成一个大于等于 min、小于等于 max 的整数,属性值 number 只是用来确定类型
  • 'name|count': object=>定对象中随机选择两条数据,
Mock.mock({
"object|2": {
"310000": "上海市",
"320000": "江苏省",
"330000": "浙江省",
"340000": "安徽省"
}
})

输出为:

{
"object": {
"320000": "江苏省",
"330000": "浙江省"
}
}



数据占位符定义规范 DPD

占位符 只是在属性值字符串中占个位置,并不出现在最终的属性值中。

  • 来标识其后的字符串是 占位符。
  • 符 引用的是 Mock.Random 中的方法。
  • Mock.Random.extend() 来扩展自定义占位符。
  • 符 也可以引用 数据模板 中的属性。
  • 符 会优先引用 数据模板 中的属性。
  • 符 支持 相对路径 和 绝对路径。

可以通过Mock.setup( settings ),配置拦截 Ajax 请求时的行为。支持的配置项有:timeout

指定被拦截的 Ajax 请求的响应时间,单位是毫秒。值可以是正整数,例如 400,表示 400 毫秒 后才会返回响应内容;也可以是横杠 '-' 风格的字符串,例如 '200-600',表示响应时间介于 200 和 600 毫秒之间。默认值是'10-100'。

Mock.setup({
timeout: 400
})
Mock.setup({
timeout: '200-600'
})

扫码关注公众号,有更多精彩文章等你哦

玩转【Mock.js】,前端也能跑的很溜的更多相关文章

  1. 玩转 Mockjs,前端也能跑的很溜

    ​ mockjs作用就是,生成随机模拟数据,拦截 ajax 请求,可以对数据进行增删改查.在生成数据时,我们就需要能够熟练使用 mock.js 的语法. Mockjs 的语法规范包括两部分:数据模板定 ...

  2. 使用 mock.js 让前端开发与后端独立

    直接上代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  3. Mock.js 与 fiddler 前端模拟数据与拦截请求

    最近 工作需要  接触了Mock.js. Mock.js 是一款模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试.提供了以下模拟功能: 根据数据模板生成模拟数据 模拟 Ajax ...

  4. 一统江湖的大前端(2)—— Mock.js + Node.js 如何与后端潇洒分手

    <一统江湖的大前端>系列是自己的前端学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类好玩的js库,不定期更新.如果你对前端的理解还是写写页面绑绑事件,那你真的是有 ...

  5. 让前端独立于后端进行开发,模拟数据生成器Mock.js

    让前端独立于后端进行开发,模拟数据生成器Mock.jsMock.js 是一款模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试. Home · nuysoft/Mock Wiki ...

  6. 前端笔记之Vue(七)Vue-router&axios&Vue插件&Mock.js&cookie|session&加密

    一.Vue-router(路由) 1.1路由创建 官网:https://router.vuejs.org/zh/ 用 Vue.js + Vue Router 创建单页应用,是非常简单的.使用 Vue. ...

  7. 让前端攻城师独立于后端进行开发: Mock.js

    一.Mock.js是什么? 目前的大部分公司的项目都是采用的前后端分离, 后端接口的开发和前端人员是同时进行的. 那么这个时候就会存在一个问题, 在页面需要使用大量数据进行渲染生成前, 后端开发人员的 ...

  8. 【Mock.js】前端模拟假数据,不用在手拼了

    [Mock.js]前端模拟假数据,不用在手拼了:https://www.jianshu.com/p/8579b703a4c1

  9. 前端开发:mock.js的简单应用(生成随机数据,拦截 Ajax 请求)

    摘要 在前端开发过程中,后端接口还没有完全开发完成时,前端开发人员就需要学会自己模拟后端接口数据,更快更好的完成开发任务.模拟后端接口数据的js库有很多,今天就简单就简单的分享下mock.js在前端开 ...

随机推荐

  1. Cent0S 6.7直接在/etc/resolv.conf文件下修改DNS地址重启不生效问题【转】

    CentOS 6.7/Linux下设置IP地址 1:临时修改: 1.1:修改IP地址 # ifconfig eth0 192.168.2.104 1.2:修改网关地址 # route add defa ...

  2. python-pptx

    python-pptx的使用首先需要了解几个基本概念: 1.引入python-pptx frompptximportpresentation    # 实例化Presentation    prs= ...

  3. api-ms-win-crt-runtime-l1-1-0.dll 丢失

    api-ms-win-crt-runtime就是MFC的运行时环境的库,python在windows上编译也是用微软的visual studio C++编译的,底层也会用到微软提供的C++库和runt ...

  4. zz SOLID (面向对象设计)

    SOLID (面向对象设计) 维基百科,自由的百科全书 跳到导航 跳到搜索 在程序设计领域, SOLID(单一功能.开闭原则.里氏替换.接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期[1] ...

  5. 微信jaapi签名

    public WeiXinJsSignature(string weixinUrl) { //string url = ConfigurationManager.AppSettings["U ...

  6. flutter Draggable Widget拖拽控件

    Draggable Widget Draggable控件负责就是拖拽,父层使用了Draggable,它的子元素就是可以拖动的,子元素可以实容器,可以是图片.用起来非常的灵活. 参数说明: data: ...

  7. postgresql 所有聚合函数整理

    SELECT DISTINCT(proname) FROM pg_proc WHERE proisagg order by proname 查所有 SELECT * FROM pg_proc WHER ...

  8. JS实现动态添加和删除div

    实现方式一:只在最后一个数据中动态添加或者删除 | 背景需要做一个页面,页面可以输入参数,点击确认按钮可以发请求给某接口.但是接口的某个字段是数组类型,所以在页面上需要实现添加或者删除元素的功能. | ...

  9. 使用 evo 工具评测 VI ORB SLAM2 在 EuRoC 上的结果

    http://www.liuxiao.org/2017/11/%E4%BD%BF%E7%94%A8-evo-%E5%B7%A5%E5%85%B7%E8%AF%84%E6%B5%8B-vi-orb-sl ...

  10. BP神经网络设计常用的基本方法和实用技术

    尽管神经网络的研究和应用已经取得巨大成功,但在网络的开发设计方面至今仍没有一套完善的理论做指导,应用中采取的主要设计方法是,在充分了解待解决问题的基础上将经验与试探相结合,通过多次改进性试验,最终选出 ...