useDirMode 模式已經符合大多數場景的要求,但是一些特殊場景還是需要了解其它寫法
下面的例子涉及的配置只能寫在 example-mock-api.js 中,useDirMode 模式生成的 js 文件只是用來返回數據的。
example 下存在很多例子
獲取請求中的參數
不區分請求方法
"/api/function/params": {
body: (data) => {
return {
params: data.params,
message: "自動解析參數並注入,可以操作request、response",
};
},
},
localhost:9192/example/api/function/params?name='寒冰射手' 將返回
{
params: {
name: "寒冰射手"
},
message: "自動解析參數並注入,可以操作request、response"
}
設置 cookie
登錄態的維持如果通過 cookie 可以通過這種方式解決
"/api/cookies": {
response: {
getCookies(data = {}) {
return {
method: data.method,
};
},
},
body: {
message: "其餘屬性程序會自動設置",
},
},
`{method: data.method};method 是 cookie 的 name,'data.method'是 cookie 的值,其餘屬性 mock 服務器會自己設置
可以返回多個
設置 http 狀態碼
默認狀態碼是 200 的,可以返回其它的。
"/api/statusCode": {
response: {
statusCode: 500,
},
body: {
color: "red",
},
},
延遲返回
mock 服務器返回接口是很快的,對於一些加載狀態調試可能不方便,可以設置接口延遲返回
"/api/delay": {
response: {
delaySeconds: 3,
},
body: {
message: "這個是一個延遲返回",
},
},
在 defaultConfig.js 中有如下配置,可以統一調節
mockData: {
response: {
delaySeconds: 0,
},
},
動態路徑
目前使用動態路徑只能將數據寫在 example-mock-api.js 內部
"/api/regexp/url/(\\w+)/(\\d+)$": {
// /api/regexp/url/name/200
body: (data) => ({
color: "red",
message: "會返回url上的參數",
execResults: data.execResults,
}),
options: {
supportRegexp: true,
},
},
(\w+) 的左右括號可以不加,加上後就可以讀取參數了,例如 http://localhost:9192/example/api/regexp/url/name/200,返回結果是
{
color: "red",
message: "會返回url上的參數",
execResults: [
"/api/regexp/url/name/200",
"name",
"200"
]
}
區分方法
mock 服務器在處理請求的時候,默認是不區分方法的,即 get、post 這些,在 defaultConfig.js 中有
mockData: {
options: {
//匹配時忽略請求的方法
ingoreMethod: true,
},
},
區分請求方法配置如下
"/api/method": {
body: {
get: {
color: "red",
message1: "方法指的是request支持的方法",
message2: "返回數據支持全部簡單模式",
},
},
options: {
ingoreMethod: false,
},
},
通過 json 或 js 存儲數據
useDirMode 模式主要是不想把數據都寫在 example-mock-api.js 中,不用該模式也有一些方式可已處理這個問題
"/api/function/json": {
body: (data) => {
return "hero.json";
},
},
//js文件
"/api/js": {
body: "able.js",
},
"/api/js/method": {
body: {
get: "able.js",
},
options: {
ingoreMethod: false,
},
},
able.js
內容如下
(function () {
return (data) => {
return {
params: data.params,
message: "除了把邏輯單獨提取外,功能上和直接寫函數是一樣的",
};
};
})();