接上一篇文件學習,我採用json-server模擬伺服器API的方式在專案中模擬資料,實現前後端分離。此文件是以 json-server 作為 mock 伺服器, mock.js 生成mock 資料,針對自己專案的情況接入json-server的過程總結。
一、安裝配置
- npm install mockjs
- npm install --save-dev fetch-mock
- npm install --save-dev json-server mockjs
二、mock檔案
mock資料夾包括json.js,mock.js,mock.web.js,routes.js,server.js
五個檔案
1、json.js
mock資料來源
list: Mock.mock({
"error": 0,
"message": "success",
'capitalDetails|30': [
{
"amount|1-100.1-5": 1.04,
"balance|100-1000.1-5": 246.16,
"entityId|1000-100000": 58391,
"freeze|1-100.1-5": 34.53,
"id|+1": 1,
"name|1": "扣除逾期費",
"operation|100-10000": 317,
"order_amount|1-5": 1,
"persistent": true,
"recieve_amount|1-5": 1,
"summary": "@ctitle",
"time": "@datetime",
"total_amount": 228.9,
"type": 2,
"user_balance": 0,
"user_id": 417445,
"way_amount": 51.79,
"id+1": 1,
"status": 1
}
]
})
複製程式碼
2、mock.js/mock.web.js
- mock思路:
- 攔截所有請求
- 進行url規則匹配
- 匹配對的,返回mock資料
- 匹配不對的,走原本流程
專案目前情況:同一個url請求,通過opt進行判斷呼叫哪個業務介面,因此無法直接使用url進行區分匹配,需要更詳細的判斷。
- app端進行介面過濾:
global.fetchMock.mock('*', (url, options) => {
//opt最終會合併到dataString中,因此使用的時候,需要解析獲取opt
var array = options.body.split("&")
var opt;
for (var temp of array) {
var temps = temp.split("=")
var key = temps[0]
var value = temps[1]
if(key==='opt'){
opt = value
}
}
const realFetch = global.fetchMock.realFetch
if(opt==='9'){
// 進行轉發請求
return realFetch('http://1**.16.11.**:8888/mock/mineData.action');
}
if(opt==='155'){
...
}
else {
// 走正常請求
rturn realFetch(url, options);
}
})
複製程式碼
注:app端進行需要mock的介面判斷,進行轉發請求時,需要修改本機IP地址,如100.16.11.00:8888
return realFetch('http://100.16.11.00:8888/mock/mineData.action');
複製程式碼
- web端進行介面過濾:
window.fetchMock.mock('*', (url, options) => {
//opt最終會合併到dataString中,因此使用的時候,需要解析獲取opt
const realFetch = window.fetchMock.realFetch
if(opt==='9'){
// 進行轉發請求
return realFetch('http://localhost:8888/mock/mineData.action');
}
if(opt==='155'){
...
}
else {
// 走正常請求
return realFetch(url, options);
}
})
複製程式碼
注:web端進行轉發請求時,localhost:8888 即可
return realFetch('http://localhost:8888/mock/mineData.action');
複製程式碼
3、routes.js
mock/routes.js重寫路由表
module.exports = {
"/mock/mineData.action": "/mineData",
"/mock/list.action": "/list"
}
複製程式碼
4、server.js
以 json-server 作為 mock 伺服器
三、啟動
1、按原本開啟執行步驟
2、控制檯輸入node mock/server.js
開啟mock-server的伺服器
http://localhost:8888/mock/mineData.action
即可在網頁上檢視到我們想要的資料
3、引入mock資料
app入口檔案:js/setup.js 開啟mock資料註釋的條件 web入口檔案:index.web.js開啟mock資料的註釋的條件
eg:
if(process.env.__DEV__) {
require('./mock/mock.web.js')
}
複製程式碼
4、重新整理