項目中使用的是RESTFUL接口規範,項目框架用的是vue,項目開始時,調研了幾個比較有名的mock數據的插件:好比webpack的中間件api-mock,json-server,mockjs,還有express。結合咱們項目的狀況,逐一嘗試,最後選擇了express。mock方式很簡單,如下爲使用方式:html
1. 安裝node/expressvue
2. package.json 中:node
npm run mock 爲單獨開啓node的mock服務;webpack
因爲項目中同時須要編譯本地代碼,因而寫了一個shell腳本文件,同時開啓本地代碼編譯及mock服務;web
如下爲shell腳本中內容:shell
#!/bin/bash npm run mock & npm run dev &
終止程序必須全局終止node進程,須要全局命令:taskkill /f /t /im node.exeexpress
3. 建立 mock 文件夾,準備server代碼編寫,此處命名爲 mock.js:npm
如下爲 mock.js 中寫法:json
var express = require('express'); var app = express(); // 指定html app.get('/index.html', function(req, res) { res.sendFile(__dirname + req.path); }); // 配置Mock數據 var fs = require('fs'); app.post('/home', function(req, res) { res.setHeader('Content-Type', 'application/json; charset=utf-8'); fs.readFile('./mock/home.json', function(err, data) { if (err) throw err; res.json(JSON.parse(data)); }); }); // 監聽端口 app.listen('3000', function () { console.log('mock app listening at http://localhost:3000'); });
優化:api
一個項目中不可能只有一個接口,爲了方便配置,在mock文件下加入了mock.js去作統一配置
/** * @note setOnline 線上接口 配置 * @param name 本地接口名 * type 接口類型 * url 線上接口地址 */ var fs = require('fs'); var setOnline = [ { name: 'home', type: 'post', url: '/home' } // 第二個接口... 第三個接口 ]; // 輸出配置項 exports.setOnline = setOnline; // 遍歷輸出json數據 for (var i = 0, len = setOnline.length; i < len; i++) { (function() { var name = setOnline[i].name; exports[name] = function(req, res) { res.setHeader('Content-Type', 'application/json; charset=utf-8'); fs.readFile('./mock/' + name + '.json', function(err, data) { if (err) throw err; res.json(JSON.parse(data)); }); }; })(i); }
修改後的 mock.js:
var express = require('express'); var app = express(); app.get('/index.html', function(req, res) { res.sendFile(__dirname + req.path); }); // Mock數據 var mock = require('./mock/mock.js'); var setOnline = mock.setOnline; setOnline.forEach(function(m) { app[m.type](m.url, mock[m.name]); }); app.listen('3737', function () { console.log('localhost:3737/index.html'); });
4. 完成後,啓動服務 npm run mock 便可