之所以看的远,是因为站在了巨人肩膀上
在此感谢dadiyang,欢迎大家去看看他的博客:Mockjs如何拦截带参数的GET请求
感谢汪先森ISME 帮我解惑,谢谢
一、问题
使用mock确实解决了前后端开发分离的问题,但是如何根据特定的请求参数,返回指定的结果呢?
这样就引出两个问题
- 如何获取请求参数
- 获取到请求参数后如何根据请求参数返回指定数量的返回结果
二、解决方案
1. mock文档
2. 获取请求参数
一开始我是用的是 URL字符串,然后带参数请求,各种拦截不到,当时为了省事,直接判断环境,如果是开发环境(dev),就去除所有请求参数 ,我承认这种方法超级low。
后来整明白了,可以使用正则表达式匹配,但是要注意URL重复的情况。
2020年11月25日 更正
这里使用正则是为了匹配到get请求,获取请求参数完全可以利用 function 中的形参options.body.xxx
获取
3. 正则
正则表达式: RegExp(url.testUrl + '.*')
,当然post请求就不需要正则了,直接写 url.testUrl 即可
4. options
- **url** 请求的url,可以提取参数
- **type** 请求的类型:get/post
- **body** 请求体,适用于post以及get请求的请求参数
关键点就在 options 上,可以从
options.body
提取参数
三、DEMO
/* 列表 */
const bank = Mock.mock(RegExp(url.testUrl + '.*'), 'get', options => {
let limit = 10; // 默认分页返回10条
try {
limit = parseInt(options.body.limit); // 避免options.body.limit获取不到直接报异常
} catch(err) {
console.error(err)
}
let mockMsg = {
result: {
rows: []
}
};
// 根据请求参数传入指定数量的数据
for (let i = 0; i < limit; i++) {
mockMsg.result.rows.push({
id: '@increment(1)'
});
}
return Mock.mock(mockMsg); // 这里一定要 return Mock.mock(xxx)
});