mock根据get请求参数返回

2 篇文章 0 订阅

之所以看的远,是因为站在了巨人肩膀上
在此感谢dadiyang,欢迎大家去看看他的博客:Mockjs如何拦截带参数的GET请求
感谢汪先森ISME 帮我解惑,谢谢

一、问题

使用mock确实解决了前后端开发分离的问题,但是如何根据特定的请求参数,返回指定的结果呢?
这样就引出两个问题

  1. 如何获取请求参数
  2. 获取到请求参数后如何根据请求参数返回指定数量的返回结果

二、解决方案

1. mock文档

Mock

2. 获取请求参数

一开始我是用的是 URL字符串,然后带参数请求,各种拦截不到,当时为了省事,直接判断环境,如果是开发环境(dev),就去除所有请求参数 ,我承认这种方法超级low。
后来整明白了,可以使用正则表达式匹配,但是要注意URL重复的情况。

2020年11月25日 更正
这里使用正则是为了匹配到get请求,获取请求参数完全可以利用 function 中的形参 options.body.xxx 获取
options参数

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)
});

四、其他问题

  • 目前仍然存在问题是,我的这种根据参数控制数组长度的方法太蠢笨了,不知道有没有其他方法?
    • 参见github问题
    • 目前有童鞋 xgwang 提供了一个解决方案,感觉很nice(🤦‍🤦‍🤦‍虽然我还没试)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值