剛開始接觸vue-cli,發現用它生成的框架代碼是缺乏Mock模擬的,因而本身摸索了許久,將本身的摸索的結果經過過程記錄下來,但願對別人有所幫助,能少走彎路。javascript
這不是關於vue-cli的,是單純的模擬數據服務
這不是關於vue-cli的,是單純的模擬數據服務
這不是關於vue-cli的,是單純的模擬數據服務
vue
同時但願得到更好的解決方案,有更好方案的不要吝嗇分享啊。java
過程變化node
projectgit
用到的node_modulesgithub
代碼以下mockServer.js
ajax
const express = require('express'); //引入express模塊
const Mock = require('mockjs'); //引入mock模塊
const app = express(); //實例化express
// 路由api對應的模擬數據
app.all('/api', function (req, res) {
// mockjs中屬性名‘|’符號後面的屬性爲隨機屬性,數組對象後面的隨機屬性爲隨機數組數量,正則表達式表示隨機規則,+1表明自增
res.json(Mock.mock({
"status": 200,
"data|1-9": [{
"name|5-8": /[a-zA-Z]/,
"id|+1": 1,
"value|0-500": 20
}]
}));
});
// 監聽8090端口
app.listen('8090');
複製代碼
最簡單的mock服務實現了,可是想一想加入後期接口數量增長,那代碼函數豈不是函數式增加!!!∑(゚Д゚ノ)ノ。還能不能愉快的維護了。正則表達式
因此改良版就來了,這裏我經過多個json文件來模擬多個請求的數據,經過一個配置文件來映射文件和接口vue-cli
用到的模塊express
mockServer.js
const express = require('express'); //引入express模塊
const Mock = require('mockjs'); //引入mock模塊
const app = express(); //實例化express
const path = require("path"); //引入path模塊 核心模塊不準要npm
const fs = require('fs'); // 引入fs模塊 核心模塊不準要npm
// 讀取配置文件 將路由和文件對應上
fs.readFile(__dirname + '/test/conf.json', 'utf-8', function (err, data) {
if (err) {
console.log(err);
} else {
let dataObject = JSON.parse(data);
for (let key in dataObject) {
app.all(dataObject[key].url, function (req, res) {
fs.readFile(path.join(__dirname + '/test', dataObject[key].path), 'utf-8', function (err, data) {
if (err) {
console.log(err);
} else {
res.json(Mock.mock(JSON.parse(data)));
}
})
});
}
}
});
// 監聽8090端口
app.listen('8090');
複製代碼
conf.json
{
"api1":{
"url":"/api1",
"path":"./api1/api1.json"
},
"api2":{
"url": "/api2",
"path": "./api2/api2.json"
}
}
複製代碼
api1.json
{
"data":"i am api1"
}
複製代碼
api2.json
{
"api2":"hahah"
}
複製代碼
通過上面的修改,終於不用寫那麼多行代碼了O(∩_∩)O哈哈~ 可是人(我)是很懶的生物,若是每次改個配置文件,改個模擬數據文件手動重啓才能生效豈不是好累 因此咱們來模擬一下熱更新,有木有好高大上的感受O(∩_∩)O哈哈~
你沒有看錯,就添加了一個mockStart.js
文件而已哦
這裏借用了nodemon
來檢檢測json文件,而後重啓mock服務
mockStart.js
var nodemon = require('nodemon'); //引入nodemon模塊
/**
* script 重啓的腳本
* ext 檢測的文件
*/
nodemon({
script: 'mockServer.js',
ext: 'json'
});
nodemon.on('start', function () {
console.log('mockServer has started');
}).on('quit', function () {
console.log('mockServer has quit');
process.exit();
}).on('restart', function (files) {
console.log('mockServer restarted due to: ', files);
});
複製代碼
仍是熟悉的接口,仍是不同的味(數)道(據),我沒有手動重啓服務哦O(∩_∩)O哈哈~,是否是很方便。