环境仿真 - 控制模拟数据

  • 作者:KK

  • 发表日期:2016.6.25


假如后端说/lottery.do这个地址是开始抽奖的,返回

{"prize":0}表示没得奖

{"prize":7}这样prize非0的时候就是得奖,值就是奖品ID

那我们就在mock-data/lottery.do.js里执行

module.exports = {
	prize : Math.floor(Math.random() * 10) //从0到9之间随机一个奖品ID
};

这样就能实现有时抽中奖,有时抽不中将的效果了


根据GET参数来判断是否中奖

我给mock服务器全局添加了一个request对象,可以利用它来做判断决定是否中奖:

var prizeId = 0;
if(request.query.debug != undefined){
	prizeId = Math.floor(Math.random() + 1 * 10);
}

module.exports = {
	prize : prizeId
};

这个request.query.debug对应地址上的debug参数,比如'/lottery.do?debug=1'

获取其它GET参数也是这个道理


根据POST参数判断是否中奖

获取POST参数的办法很简单,就是request.body.key1这样就是获取POST参数里的key1值了


接下来才是精华

这是一个专业的数据模拟器,在普通开发中需求不是很强烈,但用起来就会让效果好很多,必要的时候还是靠它才方便

npm install --save-dev mockjs安装mockjs模块到项目里

先在gulpfile里写这样的代码试试:

var mocker = require('mockjs');

var data = mocker.mock({
	message : '',
	code : 0,
	'data|3' : [{
		'status|0-1' : 1, 
		'id|855-9999': 1,
		name : '@cfirst@cname',
		'mobile|13378494691-19378494691' : 1,
		email1 : /[a-z0-9]{6,20}@163\.com/,
		email2 : '@email',
		email_by_random : mocker.Random.email(),
		url_by_random : 'http://' + mocker.Random.url(),
		ip_by_random : mocker.Random.ip(),
		group_name : /[\u4E00-\u9FA5]{3}组/,
		last_login : '@DATETIME("2016-MM-dd HH:mm:ss")'
	}]
});

console.log(data); //每次输出都不一样
return; //终止后面的gulp代码,只是拿来试试的而已

然后运行起来看看,每次控制台输出的数据都不一样是吧,所以这个mockjs是具有强大的随机数据功能的,并且我们只需要输入一些表达式就可以了,有些数据列表我就会用这个随机数据,比如排行榜,或者游戏大厅这些列表数据,还有实时中奖情况。。。


具体的用法

要了解mockjs模拟数据的具体表达式请去 [官方文档](https://github.com/nuysoft/Mock/wiki) 看以下章节:

[随机表达式说明](https://github.com/nuysoft/Mock/wiki/Syntax-Specification)

[随机方法说明](https://github.com/nuysoft/Mock/wiki/Mock.Random)