2019-10-22 前端使用Mock模擬請求后端數(shù)據(jù)增刪改查

為什么需要使用mock 腿时?

作為一個從事前端工作的程序員與后端對接時着憨,經(jīng)常會遇到臨近項目上線時才會收到后端人員的接口信息钉寝。大多數(shù)人很難在短的時間內(nèi)完成渲染和調(diào)試茬射。這時我們就需要在本地模擬后端接口用來測試前端效果 這種做法稱之為構(gòu)建前端Mock。

方案1.使用mockjs進(jìn)行Mock

安裝
npm install mockjs --save-dev
關(guān)于Mock的API使用介紹和官方文檔請移步這里

  • 在項目src目錄創(chuàng)建一個 mock.js文件
  • main.js入口文件中引入剛剛創(chuàng)建的mock 文件
    import './mock.js'

創(chuàng)建模擬數(shù)據(jù)
在 mock.js中創(chuàng)建一條用戶信息模擬數(shù)據(jù)

import Mock from 'mockjs'

const Random = Mock.Random
// 設(shè)置全局延時梆靖,沒有延時的話控汉,有時候會檢測不到數(shù)據(jù)變化
Mock.setup({
  timeout: '300-600'
})
// 創(chuàng)建一個數(shù)組用來接收模擬的數(shù)據(jù)
const mocklist = []
const count = 5;

for (let i = 0; i < count; i++) {
  mocklist.push(Mock.mock({
    id: '@id',
    name: '@cname',
    'phone|1': /^1[0-9]{10}$/,
    email: '@email',
    'education|1': ['本科', '大專', '碩士', '博士', '中專'],
    'graduationschool|1': ['西南財經(jīng)', '北京交通大學(xué)', '重慶工商大學(xué)', '清華大學(xué)', '西南大學(xué)', '上海復(fù)旦大學(xué)'],
    'profession|1': ['教授', '律師', '醫(yī)生', '公務(wù)員', '大學(xué)老師', '警察', '白領(lǐng)'],
    profile: '@cparagraph'
  }))
}

接下來進(jìn)一步實現(xiàn)增刪改查的各個數(shù)據(jù)接口,這里我的需求是返吻,只使用一次模擬數(shù)據(jù)姑子,后面使用 localStorage 來進(jìn)行存儲數(shù)據(jù)。

// 獲取用戶信息列表
function getList() {
  // 若 localStorage 沒有數(shù)據(jù)测僵,則將 Mock 的數(shù)據(jù)存入
  if (!localStorage.getItem('userlist')) {
    localStorage.setItem('userlist',JSON.stringify(mocklist))
  }
  // 每次獲取數(shù)據(jù)時街佑,再從 localStorage 中拉取數(shù)據(jù)
  var userlist = JSON.parse(localStorage.getItem('userlist'))
  return userlist
}

// 獲取單個用戶信息
function getUser(options) {
  // 先從 localStorage 中拉取數(shù)據(jù)
  var userlist = JSON.parse(localStorage.getItem('userlist'))
  // 遍歷數(shù)組,返回id 與傳來 id 相當(dāng)?shù)囊粋€對象
  for( let index in userlist) {
    if (userlist[index].id === options.body) {
      var user = userlist[index]
      return user
    }
  }
}

// 刪除用戶信息
function deleteUser(options) {
  // 先從 localStorage 中拉取數(shù)據(jù)
  var userlist = JSON.parse(localStorage.getItem('userlist'))
  // 根據(jù)傳遞的 id 刪除 用戶
  for( let index in userlist ) {
    if (userlist[index].id === options.body) {
      userlist.splice(index,1)
      localStorage.setItem('userlist', JSON.stringify(userlist))
    }
  }
  return {
    data: '用戶刪除成功'
  }
}

// 添加用戶信息
function addUser(options) {
  // 先從 localStorage 中拉取數(shù)據(jù)
  var userlist = JSON.parse(localStorage.getItem('userlist'))
  // 獲取傳入用戶信息對象捍靠,是一個字符串沐旨,需要轉(zhuǎn)化為對象
  var user = JSON.parse(options.body)
  // 使用 mock 隨機生成一個 id
  user.id = Random.id()
  // 將 user 插入到 userlist 中
  userlist.unshift(user)
  // 重新將 userlist 存入 localStorage 中
  localStorage.setItem('userlist', JSON.stringify(userlist))
  return {
    data: '用戶添加成功'
  }
}

// 更新用戶信息
function updateUser(options) {
  // 先從 localStorage 中拉取數(shù)據(jù)
  var userlist = JSON.parse(localStorage.getItem('userlist'))
  var user = JSON.parse(options.body)
  // 遍歷 userlist 根據(jù)傳入對象的 id 更新用戶信息
  for ( let index in userlist ) {

    if ( userlist[index].id === user.id ) {
      userlist[index] = user
    }
  }
  localStorage.setItem('userlist', JSON.stringify(userlist))
  return {
    data: '用戶更新成功'
  }
}

// 制作各個接口
Mock.mock('/getlist', 'get', getList)
Mock.mock('/getuser', 'post', getUser)
Mock.mock('/deleteuser', 'post', deleteUser)
Mock.mock('/adduser', 'post', addUser)
Mock.mock('/updateuser', 'post', updateUser)

// 最后將 Mock 導(dǎo)出
export default Mock

這樣在需要的組件里就可以使用相應(yīng)的接口了

案例預(yù)覽
在線效果預(yù)覽

方案2.使用json-server進(jìn)行Mock

json-server的基本使用
1.首先我們要進(jìn)行安裝

window+R 輸入cmd
安裝
npm install json-server --save-dev

2.準(zhǔn)備一個json文件(data.json)

運行 json-server data.json
切記一定要開啟
這里有個webpack設(shè)置技巧,不用每次運行項目都來開啟
1榨婆,同時啟動端口監(jiān)視與應(yīng)用磁携,需在package.json 里面做的更改:

"scripts": {
    "dev": "node build/dev-server.js",
    "build": "node build/build.js",
    "mock": "json-server --watch mock/db.json --m mock/post-to-get.js",
    "mockdev": "npm run mock | npm run dev"
  }

這樣,在啟動webpack時寫npm run mockdev就可以同時啟動了良风。
2谊迄,在使用post方法時,需要像數(shù)據(jù)庫那樣得到返回烟央,而不是更改统诺。這時候需要額外添加一個中間件在mock文件夾里,比如post-to-get.js,寫法如下:

module.exports = function (req, res, next) {
  req.method = "GET";
  next();
}

然后在package.json里面啟動中間件就可以了:"mock": "json-server --watch mock/db.json --m mock/post-to-get.js"

項目結(jié)構(gòu)如圖:


然后我們就可以愉快的使用了(請求方式我們暫用)
1.添加數(shù)據(jù)

2.刪除數(shù)據(jù)

3.修改數(shù)據(jù)

4.查找數(shù)據(jù)

5.模糊查詢

這時data中的json數(shù)據(jù)就會隨著你的操作發(fā)生改變

方案3.使用一些提供Mock服務(wù)的第三方

例如:
easy-mock
阿里的RAP 開源接口管理工具RAP第二代 http://rap2.taobao.org
bmob后端云

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吊档,一起剝皮案震驚了整個濱河市篙议,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怠硼,老刑警劉巖鬼贱,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異香璃,居然都是意外死亡这难,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進(jìn)店門葡秒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姻乓,“玉大人,你說我怎么就攤上這事眯牧√Q遥” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵学少,是天一觀的道長剪个。 經(jīng)常有香客問我,道長版确,這世上最難降的妖魔是什么扣囊? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮绒疗,結(jié)果婚禮上侵歇,老公的妹妹穿的比我還像新娘。我一直安慰自己吓蘑,他們只是感情好惕虑,可當(dāng)我...
    茶點故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著磨镶,像睡著了一般溃蔫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棋嘲,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天酒唉,我揣著相機與錄音,去河邊找鬼沸移。 笑死痪伦,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雹锣。 我是一名探鬼主播网沾,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蕊爵!你這毒婦竟也來了辉哥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎醋旦,沒想到半個月后恒水,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡饲齐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年钉凌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捂人。...
    茶點故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡御雕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滥搭,到底是詐尸還是另有隱情酸纲,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布瑟匆,位于F島的核電站闽坡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏脓诡。R本人自食惡果不足惜无午,卻給世界環(huán)境...
    茶點故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祝谚。 院中可真熱鬧宪迟,春花似錦、人聲如沸交惯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽席爽。三九已至意荤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間只锻,已是汗流浹背玖像。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留齐饮,地道東北人捐寥。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像祖驱,于是被迫代替她去往敵國和親握恳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,499評論 2 348