(8) 优雅的使用Mockjs

目标:把mockjs用好,实现数据自由


上一章我们学会了如何从服务器获取数据(包括提交数据)

演示的时候,用fastmock这个网站模拟了服务器接口,这很方便--比没有当然要强很多。

今天要学的Mockjs,功能和fastmock差不多,都是提供假数据和接口,方便调试。

但是用起来要舒服很多,堪称神器!


老规矩,先来看一下官网


很有个性的首页,生成数据和拦截网络请求,这两个描述也是很精髓。

文档很详细,也有不少例子,这个可以后面再细看,先跟着我的例子走一遍


我们先安装,按上一章的方式,我们在package.json里添加mockjs的配置,执行cnpm install,就好了


然后我们在src目录下,新建mock目录,创建user.js文件,内容如下

import Mock from 'mockjs'

var routerArr = [

    {path:'/register',componentPath:'Register'},

    {path:'/retrievePassword',componentPath:'RetrievePassword'}

]

var userInfo = {

    username:'mock',

    fullname:'我是Mock'

}

//也可以用一个方法来构造数据,灵活度会大很多

function getUserInfo(){

    return userInfo;

}

//正则写法

Mock.mock(/\/getUserRouter/,'get',routerArr)

//完全匹配的写法

var baseUrl = process.env.VUE_APP_AXIOS_BASE_URL

Mock.mock(baseUrl +'/getUserInfo','get',getUserInfo)


这个代码里面,我们定义了routerArr和userInfo两个数据,还有getUserInfo这个方法

然后用Mock.mock(url, xxx) 这个方法拦截网络请求,这样我们调用服务器时,会返回我们准备的模拟数据

好处是每个页面里面该怎么调服务器,还是那样去写,以后都不用改了。

只要用一个开关来控制mock是否启用,这是“代码无侵入”,很高级的境界


接下来我们在mock目录再创建一个index.js,用index.js来引入user.js

这么做的原因是,一个系统里的接口数量可能是几百个,如果都定义在一起就太乱了,也不方便团队协作。

index.js里面就两行代码,log那行还可以不要


然后我们来设置mock的开关,在.env.development里加这个,相应的,在production里面要写成false


最后,我们在main.js里面引入mock/index.js


ok,都弄好了,我们重启一下服务(ctrl+c关闭,yarn serve开启)

打开登录页,现在我们点这个按钮时,取到的名字成了“我是Mock”,注意我们登录页上的代码没有做任何修改


自己体会一下,把.env.development里面的true改成false,再重启一下服务,看看获取的名字有什么变化

这里我们演示的重点,是拦截网络请求,数据是我们写死的,有点不高级(但是好理解)


所以,我们还需要一个例子来演示mock如何生成随机数据

在views下面添加一个页面,代码如下(这个代码建议手打一下,熟悉熟悉)



这里面有两个按钮,分别获取列表数据和单个对象数据


配置一下路由,这个别忘了。否则页面访问不了


好了,我们访问article这个页面,能看到东西了


这两个按钮点的试试,当然什么数据也获取不到。 因为这两个接口我在fastmock里面没配

现在我们用Mockjs来提供数据,在mock目录下新建article.js文件,内容如下

import Mock from 'mockjs'

//定义随机规则

var articleRule = {

    'guid':'@guid',//guid 是唯一机器码

    'id':'@id',//id 是随机id

    'title':'@ctitle',//中文标题

    'image':"@image('200x100', '#4A7BF7', 'Hello')",//随机图片 参数分别为size, background, text

    'address':'@county(true)',//是一个随机地址

    'date':'@date("yyyy-MM-dd")',

    'authorName':'@cname',//随机中文名

    'readTimes|20-50':0,//从20-50随机取一个数字

    'email':'@email',

    'ip':'@ip'

}

//生成一个数组,注意返回的数据,要用result.list获取

Mock.mock(/\/article\/queryList/, Mock.mock({'list|5': [articleRule]}))

//单个对象

Mock.mock(/\/article\/getInfo/, Mock.mock(articleRule))

然后我们在mock/index.js里加一行


检查下.env.development里面的mock开关是不是打开了,写程序一定要细心!

一切准备就绪,刷新页面,点那两个按钮试试


很棒,随机数据出来了!

再回头看一下,我们在mock/article.js里面的写法,应该是不难理解的

具体的语法和例子官网里很多,这篇文章的重点,是如何优雅的使用mock,注意这个关键词,本章完!



©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容