fastmock增加功能根據入引數據動態邏輯返回mock內容
根據入引數據動態返回mock內容
某些場景中,我們可能需要根據介面的入參規則,加入適當的邏輯處理後再返回資料。一個簡單的場景就是登入場景,需要根據使用者名稱密碼,判斷是否登入成功。再或者,我們需要根據產品ID動態返回產品資訊,等等。現在fastmock提供了這種場景的解決方案,下圖中展示瞭如何如果在mock規則中獲取請求中的各個部分的資料然後再返回,其中包括了四種資料。
- restful連結引數,如/user/:id 當請求/user/1時 對應資料為{id: 1}。獲取方式為_req.params.id
- query查詢引數,如/user?id=1 獲取方式為_req.query.id
- body請求體資料,在請求的request body中 獲取方式為_req.body.id
- headers 頭部資訊,常用的場景是介面的token驗證 獲取方式為_req.headers.token
使用方法
- 在原來的json資料的基礎上,需要動態返回的欄位對應的值不再是固定值或者固定的mock規則,而是傳入一個函式。
- 這個函式接收兩個引數,_req和Mock 注意:這兩個變數名不能改動
- 在函式體中返回該欄位對應的值,在返回之前做相應的邏輯處理
- _req引數中包含了四個物件,_req.query , _req.params , _req.body , _req.headers可以從這四個物件中獲取上述的四種資料。
- Mock物件就是mock.js 原生物件,可以用它做mock.js中Mock物件可以做的事情,如Mock.mock({name: '@cname'})等等
如:上圖中的對應介面錄入規則為
{ "code": "0000", "data": { "token": function({_req, Mock}) { return _req.headers.token; }, "id": function({_req, Mock}) { return _req.params.id; }, "name": function({_req, Mock}) { return _req.body.name; }, "age": function({_req, Mock}) { return _req.query.age; } }, "desc": "成功" }
再舉一個驗證登入資訊的例子:
{ "code": "0000", "data": { "verifySuccess": function({_req, Mock}) { let body = _req.body; return body.username === 'admin' && body.password === '123456'; }, "userInfo": function({_req, Mock}) { let body = _req.body; if (body.username === 'admin' && body.password === '123456') { return Mock.mock({ username: "admin", email: "@email", address: "@address" }); } else { return null; } }, }, "desc": "成功" }
上面的規則中定義了登入介面只有請求體{username: 'admin', password: '123456'}時,才會返回使用者資訊,且帶有mock生成的隨機郵箱地址和居住地址