faked 是一個在前端開發中用於 mock 服務端接口的模塊,輕量簡單,無須要在本地啓動 Server 也無需其它更多的資源,僅在瀏覽器中完成「請求拉截」,配合完整的「路由系統」垂手可得的 mock 後端 API。html
GitHub Rep 地址:https://github.com/Houfeng/faked前端
有兩種可選安裝方式,你能夠經過傳統的 sciprt
方式引入 faked,若是你採用了 CommonJs 或 ES6 Modules 模塊方案,也可經過安裝 NPM Pageage 的方式安裝依賴。webpack
經過 script 引入:git
<script src="your-path/faked.min.js"></script>
經過 npm 安裝:github
$ npm i faked --save-dev
CommonJs 方式引用web
const faked = require('faked');
ES6 Modules 方式引用ajax
import faked from 'faked'
經過 faked.when
方法你幾乎就可使用 faked 的全部功能了,儘管 faked 還提供了一組「快捷方法」,faked.when
方法說明以下:npm
//指定單一 Http Method faked.when(<method>, <pattern>, <handler>); //指定多個 Http Method faked.when(<methods>, <pattern>, <handler>);
示例,模擬一個獲取用戶信息的接口,參考以下代碼:json
faked.when('get','/user/{id}', function(){ this.send({name:'Bob'}); });
每個 handler
的 this
就是當前請求上下文對象,對象有以下主要成員:後端
this.send(data, status, headers)
方法,用於響應一個請求,status 默認爲 200this.params
路由參數對象,用於訪問路由模式中的「路由參數」,如上邊示例中的 idthis.query
解析查詢字符串對應的對象,好比 ?name=bob
能夠經過 this.query.name
訪問this.body
請求的主體內容,一般會是一個 json
對象,它取決於發起的請求。除了使用 send
方法,還能夠直接「返回」數據,參考以下代碼:
faked.when('get','/user/{id}', function(){ return {name:'Bob'}; });
固然,在有「異步處理」時你也能夠返回一個 promise
對象或像上邊那樣用 send
方法。若是你只想 mock 數據,還可使用簡化寫法,參考以下代碼:
faked.when('get','/user/{id}', {name:'bob'});
faked 還基於 when 方法提供了一組快捷方法,對應經常使用的 Http Methods,包括:
get, post, put, delete, options, patch, head, copy, link, unlink, lock, unlock, view
用 faked.get
寫一個示例:
faked.get('/user/{id}',function(){ this.send({name:'Bob'}); });
其它快捷方法和 faked.get
用法徹底一致。
在編輯 Mock API 時, faked 提供了路由支持,如上邊看到的 /user/{id}
,就是一個路由「匹配模式」,其中 {id}
是一個路由參數,當多個路由同時匹配請求的 URL 時,只會觸發第一個執行,不一樣的 Http Method
的 URL 匹配模式能夠相同,並不會衝突。路由參數還能夠加「限定表達式」,參考以下代碼:
// User Id 只能是數字 faked.get('/user/{id:\d+}', {name:'test'});
有時候,咱們但願 Mock API 能延時響應數據,以模擬「網絡延時」,faked 目前支持固定的「延時設置」,參考以下代碼:
const faked = require('faked'); //全部的請求都將被延時 2 秒種再響應用 mock 數據 faked.delay = 2000;
當 delay 設置 0 時,將禁用延時。
faked 還可設置 Mock API 的最大響應時間,這項設置存在的意義還在於「全部 Mock API 的 Handler 默認都是異步的,若是忘記「返回或 Send」一個響應結果,請求將會被一直掛起,有了超時設置,超時時將會拋出一個錯誤,方便定位問題」,參考以下代碼:
const faked = require('faked'); //在超過 8 秒未響應數據時,將會打印一個錯誤消息 faked.timeout = 8000;
超時設置和延時設置並不會相互影響,超時計算是從延時結束後開始的。
faked 除了能 mock 常規的 ajax
和 fetch
請求,還能 mock 經常用來處理跨域問題的 jsonp
請求,faked 有兩個參數用於配置 jsonp,參考以下代碼:
//指定服務端用於獲取「回調函數名」的 「QueryString 參數」 faked.jsonp.param = 'callback'; //默認值爲 callback 和 jQuery 一致 //有些 jsonp 服務多是固定了「回調函數名」,能夠這樣設定 faked.jsonp.callback = 'your-callbak-name';
faked 是一個「輔助開發」的工具,除非有特殊須要,通常狀況下它不該出如今你的生產代碼中,因此須要注意:
好比,在 webpak
中,能夠根據環境變量決定入口文件,並只在 mock
的入口文件中引用 faked,示例:
webpack.config.js
module.exports = { entry: { //根據 NODE_ENV 決定是 index.js 仍是 index.mock.js bundle: `./src/index${NODE_ENV=='mock'?'.mock':''}.js` }, output: { path: './dist/', filename: `./[name]${NODE_ENV == 'prod'?'.min':''}.js` }, devtool: 'source-map', module: { loaders: [...] }, plugins: [...] };
而後,在 index.mock.js
中這樣寫:
require('./mock') require('./index');
用於存放的 mock
代碼的 mock.js
多是這樣的:
const faked = require('faked'); faked.get('/user/{id}',function(){ this.send({name:'Bob'}); });
固然,你能夠根據實際狀況,安排你的文或目錄結構。
-- END --