VUE開發(fā)--Mock(二十六)

一、Mock簡介

??在我們的生產(chǎn)實(shí)際中表谊,后端的接口往往是較晚才會(huì)出來搔谴,并且還要寫接口文檔,于是我們的前端的許多開發(fā)都要等到接口給我們才能進(jìn)行驶沼,這樣對(duì)于我們前端來說顯得十分的被動(dòng)炮沐,于是有沒有可以制造假數(shù)據(jù)來模擬后端接口呢,答案是肯定的回怜。應(yīng)該有人通過編寫json文件來模擬后臺(tái)數(shù)據(jù)大年,但是很局限换薄,比如增刪改查這些接口怎么實(shí)現(xiàn)呢,于是今天我們來介紹一款非常強(qiáng)大的插件Mock.js翔试,可以非常方便的模擬后端的數(shù)據(jù)轻要,也可以輕松的實(shí)現(xiàn)增刪改查這些操作。
作用:
1.前后端分離
2.不需要修改既有代碼垦缅,就可以攔截 Ajax 請(qǐng)求冲泥,返回模擬的響應(yīng)數(shù)據(jù)。
3.數(shù)據(jù)類型豐富
4.通過隨機(jī)數(shù)據(jù)壁涎,模擬各種場(chǎng)景凡恍。
http://mockjs.com/examples.html
示例代碼
https://github.com/nuysoft/Mock/wiki
MockAPI

  1. 安裝
npm install mockjs --save-dev
或
npm install ts-mock-imports --save-dev

項(xiàng)目搭建起來之后,能夠在package.json里面看到 "mockjs": "^1.0.1-beta3" 這塊代碼怔球,就說明mockjs已經(jīng)引入載入成功嚼酝。

  1. 在入口js(main.js)里引入mockjs
// 引入mockjs
require('../mock/index.js')
或
// 引入mockjs
import '@/mock/index.ts';
  1. 在根目下創(chuàng)建Mock目錄:


    Mock目錄

    index.js

import Mock from 'mockjs'

// 獲取 mock.Random 對(duì)象
const Random = Mock.Random;

// mock一組數(shù)據(jù)
const produceNewsData = function() {
    let articles = [];
    for (let i = 0; i < 100; i++) {
        let newArticleObject = {
            title: Random.csentence(5, 30), //  Random.csentence( min, max )
            thumbnail_pic_s: Random.dataImage('300x250', 'mock的圖片'), // Random.dataImage( size, text ) 生成一段隨機(jī)的 Base64 圖片編碼
            author_name: Random.cname(), // Random.cname() 隨機(jī)生成一個(gè)常見的中文姓名
            date: Random.date() + ' ' + Random.time() // Random.date()指示生成的日期字符串的格式,默認(rèn)為yyyy-MM-dd;Random.time() 返回一個(gè)隨機(jī)的時(shí)間字符串
        }
        articles.push(newArticleObject)
    }
 
    return {
        articles: articles
    }
}
//一個(gè)post請(qǐng)求竟坛,地址為:/news/index 數(shù)據(jù)為: produceNewsData
Mock.mock('/news/index', 'post', produceNewsData);
  1. 代理配置
    cli2.0:

cli3.0:


  1. 模擬后臺(tái)接口返回JSON數(shù)據(jù)

二闽巩、 簡單示例

Mock.mock('http://123.com',{
    'name|3':'fei',//這個(gè)定義數(shù)據(jù)的模板形式下面會(huì)介紹
    'age|20-30':25,
})

$.ajax({
    url:'http://123.com',
    dataType:'json',
    success:function(e){
       console.log(e)
    }
})

在這個(gè)例子中我們截獲地址為http://123.com返回的數(shù)據(jù)是一個(gè)擁有name和age的對(duì)象,那么ajax返回的數(shù)據(jù)就是Mock定義的數(shù)據(jù)担汤,返回的數(shù)據(jù)格式如下:

{
     name:'feifeifei',
     age:26,
}

三涎跨、數(shù)據(jù)定義
數(shù)據(jù)模板中的每個(gè)屬性由 3 部分構(gòu)成:屬性名、生成規(guī)則漫试、屬性值:

// 屬性名   name
// 生成規(guī)則 rule
// 屬性值   value
'name|rule': value

1.'name|min-max': string 通過重復(fù)
string
生成一個(gè)字符串六敬,重復(fù)次數(shù)大于等于 min,小于等于 max

例子:'lastName|2-5':'jiang', 重復(fù)jiang這個(gè)字符串 2-5 次

2.'name|count': string 通過重復(fù) string 生成一個(gè)字符串驾荣,重復(fù)次數(shù)等于 count

例子:'firstName|3':'fei', 重復(fù)fei這個(gè)字符串 3 次外构,打印出來就是'feifeifei'。

3.'name|min-max': number 生成一個(gè)大于等于 min播掷、小于等于 max 的整數(shù)审编,屬性值 number 只是用來確定類型。

例子:'age|20-30':25, 生成一個(gè)大于等于 20歧匈、小于等于 30 的整數(shù)垒酬,屬性值 25 只是用來確定類型

4.'name|+1': number 屬性值自動(dòng)加 1,初始值為 number

例子:'big|+1':0, 屬性值自動(dòng)加 1件炉,初始值為 0勘究,以后每次請(qǐng)求在前面的基礎(chǔ)上+1

5.'name|min-max.dmin-dmax': number 生成一個(gè)浮點(diǎn)數(shù),整數(shù)部分大于等于 min斟冕、小于等于 max口糕,小數(shù)部分保留 dmin
到 dmax 位。

例子:'weight|100-120.2-5':110.24, 生成一個(gè)浮點(diǎn)數(shù),整數(shù)部分大于等于 100磕蛇、小于等于 120景描,小數(shù)部分保留 2 到 5 位

6.'name|1': boolean 隨機(jī)生成一個(gè)布爾值十办,值為 true 的概率是 1/2,值為 false 的概率同樣是 1/2

例子:'likeMovie|1':Boolean, 隨機(jī)生成一個(gè)布爾值超棺,值為 true 的概率是 1/2向族,值為 false 的概率同樣是 1/2。

7.屬性值是對(duì)象:var obj={'host':'www.baidu','port':'12345','node':'selector'}
(1).'name|count': object 從屬性值 object 中隨機(jī)選取 count 個(gè)屬性棠绘。

  例子:'life1|2':obj, 從屬性值 obj 中隨機(jī)選取 2 個(gè)屬性

(2).'name|min-max': object 從屬性值 object 中隨機(jī)選取 min 到 max 個(gè)屬性

  例子:'life1|1-2':obj, 從屬性值 obj 中隨機(jī)選取 1 到 2 個(gè)屬性件相。

8.屬性值是數(shù)組:var arr=['momo','yanzi','ziwei']
(1)..'name|1': array 從屬性值 array 中隨機(jī)選取 1 個(gè)元素,作為最終值

  例子:'friend1|1':arr, 從數(shù)組 arr 中隨機(jī)選取 1 個(gè)元素氧苍,作為最終值适肠。

(2).'name|+1': array 從屬性值 array 中順序選取 1 個(gè)元素,作為最終值候引。

  例子:'friend2|+1':arr, 從屬性值 arr 中順序選取 1 個(gè)元素,作為最終值敦跌,第一次就是'momo',第二次請(qǐng)求就是'yanzi'

(3).'name|count': array 通過重復(fù)屬性值array 生成一個(gè)新數(shù)組澄干,重復(fù)次數(shù)為 count。

  例子:'friend3|2':arr, 重復(fù)arr這個(gè)數(shù)字2次作為這個(gè)屬性值柠傍,得到數(shù)據(jù)應(yīng)該是['momo','yanzi','ziwei','momo','yanzi','ziwei']

(4)..'name|min-max': array 通過重復(fù)屬性值 array 生成一個(gè)新數(shù)組麸俘,重復(fù)次數(shù)大于等于 min,小于等于 max惧笛。

  例子:'friend3|2-3':arr,//通過重復(fù)屬性值 arr 生成一個(gè)新數(shù)組从媚,重復(fù)次數(shù)大于等于 2,小于等于 3

三患整、Mock示例

var arr=['momo','yanzi','ziwei']
        var obj={
            'host':'www.baidu',
            'port':'12345',
            'node':'selector'
        }

        Mock.mock('http://www.bai.com',{
            'firstName|3':'fei',//重復(fù)fei這個(gè)字符串 3 次拜效,打印出來就是'feifeifei'。
            'lastName|2-5':'jiang',//重復(fù)jiang這個(gè)字符串 2-5 次各谚。
            'big|+1':0, //屬性值自動(dòng)加 1紧憾,初始值為 0
            'age|20-30':25,//生成一個(gè)大于等于 20踱侣、小于等于 30 的整數(shù)授嘀,屬性值 25 只是用來確定類型
            'weight|100-120.2-5':110.24,//生成一個(gè)浮點(diǎn)數(shù),整數(shù)部分大于等于 100、小于等于 120第租,小數(shù)部分保留 2 到 5 位膀息。
            'likeMovie|1':Boolean,//隨機(jī)生成一個(gè)布爾值般眉,值為 true 的概率是 1/2,值為 false 的概率同樣是 1/2潜支。
            'friend1|1':arr,//從數(shù)組 arr 中隨機(jī)選取 1 個(gè)元素甸赃,作為最終值。
            'friend2|+1':arr,//從屬性值 arr 中順序選取 1 個(gè)元素毁腿,作為最終值
            'friend3|2-3':arr,//通過重復(fù)屬性值 arr 生成一個(gè)新數(shù)組辑奈,重復(fù)次數(shù)大于等于 2苛茂,小于等于 3。
            'life1|2':obj,//從屬性值 obj 中隨機(jī)選取 2 個(gè)屬性
            'life1|1-2':obj,//從屬性值 obj 中隨機(jī)選取 1 到 2 個(gè)屬性鸠窗。
            'regexp1':/^[a-z][A-Z][0-9]$/,//生成的符合正則表達(dá)式的字符串
            
        })

        $.ajax({
            url:'http://www.bai.com',
            dataType:'json',
            success:function(e){
                console.log(e)
            }
        })

實(shí)現(xiàn)數(shù)據(jù)增改查的模擬數(shù)據(jù)接口:


/*模擬刪除數(shù)據(jù)的方式*/
var arr=[
    {name:'fei',age:20,id:1},
    {name:'liang',age:30,id:2},
    {name:'jun',age:40,id:3},
    {name:'ming',age:50,id:4}
]

Mock.mock('http://www.bai.com','delete',function(options){
    var id = parseInt(options.body.split("=")[1])//獲取刪除的id
    var index;
    for(var i in arr){
        if(arr[i].id===id){//在數(shù)組arr里找到這個(gè)id
            index=i
            break;
        }
    }
    arr.splice(index,1)//把這個(gè)id對(duì)應(yīng)的對(duì)象從數(shù)組里刪除
    return arr;//返回這個(gè)數(shù)組,也就是返回處理后的假數(shù)據(jù)
})
$.ajax({
    url:'http://www.bai.com',
    type:"DELETE",
    data:{
        id:1//假設(shè)需要?jiǎng)h除id=1的數(shù)據(jù)
    },
    dataType:'json',
    success:function(e){
        console.log(e)
    }
})

四妓羊、常用函數(shù):

1.Mock.Random
http://mockjs.com/0.1/#Mock.Random

Mock.Random.csentence() 可以返回一個(gè)隨機(jī)的中文句子
Mock.Random.domain() 可以返回一個(gè)隨機(jī)的域名

  1. Mock.mock([你發(fā)起Ajax請(qǐng)求的URL], ["get"或"post"],[根據(jù)Mock.Random定制的模板或函數(shù)])
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市稍计,隨后出現(xiàn)的幾起案子躁绸,更是在濱河造成了極大的恐慌,老刑警劉巖臣嚣,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件净刮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡硅则,警方通過查閱死者的電腦和手機(jī)淹父,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怎虫,“玉大人暑认,你說我怎么就攤上這事〈笊螅” “怎么了蘸际?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長徒扶。 經(jīng)常有香客問我粮彤,道長,這世上最難降的妖魔是什么姜骡? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任导坟,我火速辦了婚禮,結(jié)果婚禮上圈澈,老公的妹妹穿的比我還像新娘乍迄。我一直安慰自己,他們只是感情好士败,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布闯两。 她就那樣靜靜地躺著,像睡著了一般谅将。 火紅的嫁衣襯著肌膚如雪漾狼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天饥臂,我揣著相機(jī)與錄音逊躁,去河邊找鬼。 笑死隅熙,一個(gè)胖子當(dāng)著我的面吹牛稽煤,可吹牛的內(nèi)容都是我干的核芽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼酵熙,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼轧简!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起匾二,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤哮独,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后察藐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體皮璧,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年分飞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悴务。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡譬猫,死狀恐怖惨寿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情删窒,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布顺囊,位于F島的核電站肌索,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏特碳。R本人自食惡果不足惜诚亚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望午乓。 院中可真熱鬧站宗,春花似錦、人聲如沸益愈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蒸其。三九已至敏释,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摸袁,已是汗流浹背钥顽。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留靠汁,地道東北人蜂大。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓闽铐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奶浦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子兄墅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 前端開發(fā)過程中免不了出現(xiàn)等接口的情況,而靜態(tài) JSON 不足以體現(xiàn)前端高大上的逼格财喳,是時(shí)候拿出 mock.js 了...
    MrWelson閱讀 1,763評(píng)論 0 0
  • 學(xué)習(xí)目的 ①開發(fā)時(shí)察迟,后端還沒完成數(shù)據(jù)輸出,前端只好寫靜態(tài)模擬數(shù)據(jù)耳高。數(shù)據(jù)牽制與后端扎瓶,前端頁面無法很好的展示,...
    _1633_閱讀 4,547評(píng)論 0 24
  • Mock.js 是一款前端開發(fā)中攔截Ajax請(qǐng)求再生成隨機(jī)數(shù)據(jù)響應(yīng)的工具.可以用來模擬服務(wù)器響應(yīng). 優(yōu)點(diǎn)是非常簡單...
    中v中閱讀 775評(píng)論 0 0
  • mock.js是一款前端開發(fā)中攔截Ajax請(qǐng)求再生成隨機(jī)數(shù)據(jù)響應(yīng)的工具.可以用來模擬服務(wù)器響應(yīng). 優(yōu)點(diǎn)是非常簡單方...
    劉其瑞閱讀 22,293評(píng)論 1 4
  • 原創(chuàng) 2018-05-05 胡京 胡京隨筆集 胡京隨筆集 一泌枪、 今天很有幸的看到一次現(xiàn)場(chǎng)求婚概荷。 就在學(xué)校的操場(chǎng)上,...
    咕嚕小屋閱讀 581評(píng)論 2 2