express+mockjs實現(xiàn)模擬后臺數(shù)據(jù)發(fā)送功能
前言:
大多數(shù)時候,前端會和后端同時進行開發(fā),即在我們開發(fā)完頁面的時候,很可能還不能立馬進入聯(lián)調(diào)階段,這個時候,為了保證我們接口的有效性和代碼的功能完整,我們可能需要模擬數(shù)據(jù)。
模擬數(shù)據(jù)方法
1.通過js變量模擬后臺數(shù)據(jù)
優(yōu)點:不需要服務(wù)器
缺點:需要造很多變量,同時還要將變量在我們的有效代碼中使用,最后還得刪除
2.通過ajax請求json文件
優(yōu)點:只需要配置路徑,就可以訪問,進入聯(lián)調(diào)階段不用修改大量的js代碼
缺點:ajax存在跨域問題,通常無法請求本地文件,即使火狐也存在不能訪問不同文件目錄下的json文件,通常需要通過ide或者自己手動啟動服務(wù)
3.用nodejs自己寫一個專門用來發(fā)送請求的服務(wù),不包含業(yè)務(wù)邏輯
優(yōu)點:前端的代碼進入聯(lián)調(diào)階段只需要修改一個basePath,所有的接口名字都可以和約定好的路徑保持一致,可以測試post請求,模擬網(wǎng)絡(luò)環(huán)境
缺點:自己要寫一個后臺
1、2兩種模擬數(shù)據(jù)的方式適合用來做demo,但是如果做得是上線項目,我們還是推薦使用自己搭建一個node后臺
1.準備node環(huán)境、npm/cnpm
2.安裝express、mockjs

3.創(chuàng)建服務(wù)端文件server.js,引入相關(guān)模塊
let express = require('express'); //引入express模塊
let Mock = require('mockjs'); //引入mock模塊
let app = express(); //實例化express
4.配置接口路由,設(shè)置監(jiān)聽端口
/**
* 配置test.action路由
* @param {[type]} req [客戶端發(fā)過來的請求所帶數(shù)據(jù)]
* @param {[type]} res [服務(wù)端的相應(yīng)對象,可使用res.send返回數(shù)據(jù),res.json返回json數(shù)據(jù),res.down返回下載文件]
*/
app.all('/test.action', function(req, res) {
res.send('hello world');
});
/**
* 監(jiān)聽8090端口
*/
app.listen('8090');
此時我們直接訪問http://localhost:8090/test.action,就可以直接在界面看到'hello world'文字
5.使用mockjs返回格式化json數(shù)據(jù)
app.all('/test.action', function(req, res) {
/**
* mockjs中屬性名‘|'符號后面的屬性為隨機屬性,數(shù)組對象后面的隨機屬性為隨機數(shù)組數(shù)量,正則表達式表示隨機規(guī)則,+1代表自增
*/
res.json(Mock.mock({
"status": 200,
"data|1-9": [{
"name|5-8": /[a-zA-Z]/,
"id|+1": 1,
"value|0-500": 20
}]
}));
});
此時我們再訪問頁面數(shù)據(jù),我們就可以得到一份隨機的json數(shù)據(jù)
6.創(chuàng)建模擬數(shù)據(jù)文件夾testData,創(chuàng)建模擬數(shù)據(jù)json文件(注意:json文件中不能使用正則,且對象屬性必須為雙引號字符串)
7.遍歷模擬數(shù)據(jù)文件,生成對應(yīng)路由
/*readdir讀取目錄下所有文件*/
fs.readdir('./testData', function(err, files) {
if(err) {
console.log(err);
} else {
/*成功讀取文件,取得文件名,拼接生成對應(yīng)action,監(jiān)聽對應(yīng)接口并返回對應(yīng)文件數(shù)據(jù)*/
files.forEach(function(v, i) {
app.all(`/${v.replace(/json/, 'action')}`, function(req, res) {
fs.readFile(`./testData/${v}`, 'utf-8', function(err, data) {
if(err) {
console.log(err);
} else {
res.json(Mock.mock(JSON.parse(data)));
}
})
})
})
}
})
至此,我們的node服務(wù)器已經(jīng)搭建成功,使用node server.js運行服務(wù)器,我們就可以直接在前端訪問接口,但是如果只是單純的生成后臺,前端頁面不通過后臺進行訪問的話,存在跨域問題,如果需要解決,可以在后臺添加跨域請求
/*為app添加中間件處理跨域請求*/
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header('Access-Control-Allow-Headers', 'Content-Type');
next();
});
ps:如果mock需要使用正則,請單獨配置路由進行處理,express和mockjs更多指令,請查閱官網(wǎng)api
總結(jié)
以上是小編給大家介紹的express+mockjs實現(xiàn)模擬后臺數(shù)據(jù)發(fā)送功能,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
相關(guān)文章
js+csss實現(xiàn)的一個帶復(fù)選框的下拉框
用js+csss實現(xiàn)的一個帶復(fù)選框的下拉框,用到了很基礎(chǔ)的技術(shù),但是比較實用,喜歡的朋友可以參考下2014-09-09
JS使用cookie實現(xiàn)DIV提示框只顯示一次的方法
這篇文章主要介紹了JS使用cookie實現(xiàn)DIV提示框只顯示一次的方法,涉及JavaScript基于cookie標(biāo)記控制頁面元素樣式修改的技巧,需要的朋友可以參考下2015-11-11
如何在JavaScript中創(chuàng)建具有多個空格的字符串?
這篇文章主要介紹了如何在JavaScript中創(chuàng)建具有多個空格的字符串?,需要的朋友可以參考下2020-02-02

