無論是在工作,還是在業余時間做前端開發的時候,難免出現后端團隊還沒完成接口的開發,而前端團隊卻需要實現對應的功能,不要問為什么,這是肯定存在的。本篇文章就是基于此原因而產出的。希望對有這方面的需求的同志有所幫助。
一、使用的組件包
1. mockjs:用于模擬查詢結果
2. json-server:搭建模擬服務器,以及模擬CRUD的相關操作接口
二、具體的實現1. 建立項目,并安裝相應的依賴
cnpm install --save-dev mockjs json-server
上述命令為安裝依賴,下圖為項目結果:
說明:
data:此文件夾存放的為利用mockjs模擬的查詢結果,dataProvider后面單獨簡單
lib:包含的一個jquery文件,用于模擬ajax請求用
route:json-server的路由表,用于模擬crud操作用,沒搞清楚如何實現多個db.json
index.js:模擬服務器入口文件
test.html:測試cors
2. 搭建基礎的json-server服務器
var JsonServer = require('json-server');var path = require('path')var Server = JsonServer.create();var defaultMid = JsonServer.defaults({ "noCors": false, "static": path.join(__dirname, "/lib")});var router = JsonServer.router(path.join(__dirname, '/route/db.json'));Server.use(defaultMid);Server.use(router);Server.listen(8009);console.log('start 8009.....');
此部分內容完全按照json-server的官方說明編寫,值得注意的是static和noCors的設置,他是作為一個中間件來完成的。
3. 增加mockjs的應用
在這里mockjs只作為參生數據的基石,而dataProvider.js卻提供了統一外部訪問接口的能力。也就是把模擬數據以module(相當于mvc中的controller)和func(相當于mvc中的action)來進行分隔。不知這種實現是否可行(本人現在項目中暫時是這樣使用的。)
3.1 首先,在data文件夾中建立emp.js文件,編寫了如下內容:
var mockjs = require('mockjs');module.exports = { list: function(){ var data = mockjs.mock({ 'list|3':[ { 'id|+1':1 } ] }); return data.list; }}
此處就是對mockjs的使用
3.2 dataProvider使用實現模塊的收集
var emp = require('./emp');var moduels = { emp: emp}module.exports = { execute: function(m, f, args){ return moduels[m][f].call(moduels[m], args); }}
3.3 json中增加get方法,用于獲取數據
var provider = require('./data/dataProvider');Server.get('/data',function(req,res){ var moduleName = req.body ? req.body.moduleName : req.query.moduleName; var funName = req.body ? req.body.funName : req.query.funName; var arg = null; res.json(provider.execute(moduleName, funName)); res.end();});
如果要訪問emp下的List,則地址為:http://localhost:8009/data?moduleName=emp&funName=list
4. 總結
1. json-server的db.json文件只能有一個,這里可以配置多個數據實體,他是以get為獲取,post為寫入http協議來實現數據的CRUD的
看到這里,你是否有感覺到搭建一個數據模擬服務器如此簡單,當然只是webapi的。下載示例代碼
以上這篇mockjs,json-server一起搭建前端通用的數據模擬框架教程就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。
新聞熱點
疑難解答