vue mockjs使用方法

大部分內容參照簡書文章:https://www.jianshu.com/p/1f6a3180051b

安裝開發依賴

npm install mockjs -D

安裝mockjs在你的開發依賴上,因爲你生產環境用的是正式的接口,安裝在開發依賴上可以減少你包的大小。

main.js:

import './mock'  //引用mock

建立mock目錄

src目錄 中,建立一個mock的文件夾:

image-20200527114839646

index.js

樣例

index文件用於來合併mock攔截相應請求接口,並使用mock的方法模擬後端返回數據,示例:

// index.js
// 引入mockjs
import Mock from 'mockjs'

// 引入所寫的接口攔截操作方法文件
import rootAPI from './root'

// root相關
Mock.mock(/\/system\/root\/list/, 'get', rootAPI.getRootList)
Mock.mock(/\/system\/root/, 'get', rootAPI.getRoot)
Mock.mock(/\/system\/root/, 'post', rootAPI.addRoot)
Mock.mock(/\/system\/root/, 'put', rootAPI.updateRoot)
Mock.mock(/\/system\/root/, 'delete', rootAPI.delRoot)

// ***相關
Mock.mock(url, method, function)

參數

Mock.mock(url, method, function) 實現請求攔截,參數:

參數 描述
url 後端數據請求接口url
method 請求方法類型
function 攔截請求後的處理方法

其它文件

樣例

示例中以 root.js 爲例,用來存放相應的請求攔截處理方法:

// 引入mockjs
import Mock from 'mockjs'

// 公共方法
function fn1(x) {
    // ...
}
function fn2(x) {
    // ...
}

// 參數配置
let List = [] // 數據列表
const count = 50 // 數據數量

// 隨機生成數據
for (let i = 0; i < count; i++) {
  // Mock.mock()方法隨機生成數據
  List.push(Mock.mock({
    dataname: "data",
    // ...
  }))
}

// 請求攔截相應的執行方法,一下以獲取列表爲例
export default {
  /**
   * 獲取列表
   * @param owner, ipCode, status, pageNum, pageSize
   * @return {{code: number, ok: bool, data: array, total: number}}
   */
  getRootList: queryParams => {
    // 獲取搜索參數,param2Obj方法用於將param轉換爲對象格式
    const { owner, ipCode, status, pageNum = 1, pageSize = 10 } = param2Obj(queryParams.url)
    // 搜索方法
    const mockList = List.filter(item => {
      if (owner && item.owner.indexOf(owner) === -1) return false
      if (ipCode && item.ipCode.indexOf(ipCode) === -1) return false
      if (status && item.status.indexOf(status) === -1) return false
      return true
    })
    // 分頁
    const pageList = mockList.filter((item, index) => index < pageSize * pageNum && index >= pageSize * (pageNum - 1))
    // 返回數據,模擬後端
    return {
      code: 200,
      ok: true,
      data: pageList,
      total: mockList.length
    }
  },
  // 其他方法
  listFn: x => {
      // ...
  }
}

mockjs隨機生成數據相關方法

如上樣例所示,採用for循環,通過 push() 方法向 List 添加數據,示例:

for (let i = 0; i < count; i++) {
  List.push(Mock.mock({
    id: Mock.Random.id(),
    code: Mock.Random.guid(),
    ipCode: Mock.Random.ip(),
    owner: Mock.Random.cname(),
    'status|1': ['0', '1'],
    createdTime: Mock.Random.datetime(),
    updatedTime: Mock.Random.datetime()
  }))
}

Mock.Random

本方法可以隨機生成相應種類參數, Mock.Random.{type}() 實現,常用種類:

type 示例
id 360000201910290362
guid B7fa74Ac-2fDD-24dC-E8af-ff39dcbd6158
ip 139.232.165.220
cname 潘濤
name Richard Walker
datetime 1974-02-03 12:36:46

其它類型請前往Mock文檔查看。

自定義隨機數據

以樣例中的隨機選擇數組中數據爲例:

// 'name|1': array
'status|1': ['a', 'b', 'c']

status就會隨機選擇數組中的一個數據。

更多示例請查看Mock文檔

其它

常用公共方法

param轉對象

前端常用get請求通過param帶參數請求,以下方法可以將param轉換爲對象格式:

// param 轉 對象
function param2Obj(url) {
  const search = url.split('?')[1]
  if (!search) {
    return {}
  }
  return JSON.parse('{"' + decodeURIComponent(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}')
}

獲取url中“/”後的id等參數

通常修改刪除等操作會使用id參數,通常在url最後的"/"後面(例:api/user/1002003),並且如果有多個參數(例:api/user/1002003,1023503,2402806)會返回一個數組:

// 獲取最後一個“/”後參數
function getFinal(url) {
  const id = url.split('/').reverse()[0];
  if (id.indexOf(',') === -1) {
    return id
  }
  const ids = id.split(',')
  return ids
}

數據搜索方法

搜索使用filter方法搜索,生成搜索結果在mockList中:

// 搜索方法
const mockList = List.filter(item => {
  if (owner && item.owner.indexOf(owner) === -1) return false
  if (ipCode && item.ipCode.indexOf(ipCode) === -1) return false
  if (status && item.status.indexOf(status) === -1) return false
  return true
})
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章