使用NodeJS模拟数据

在前端开发中,经常需要自己造假数据来模拟真实环境。然而,有时候数据量很大,通过手动的方式复制粘贴,再修改各个属性值,始终效率过低,而且很容易出错(比如多个逗号,少个括号之类的);再者,有时候需要不定值的测试数据,此时手动方式就更显低效,使用程序结合随机数生成数据,灵活度与效率大幅度提升,何乐而不为~

这两天,参与一个Hybrid App的开发,App内嵌web页面,肯定少不了与Native的通信。今天早上成功实现了使用Nodejs生成模拟测试数据。废话不多说,把我的成果搬上来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
var fs = require('fs');
var areaCount = 9;
var tableCountPerAreaRandom = [15,30];
var seatCountRandom = [2,6];
var ChiniseArr = ['一','二','三','四','五','六','七','八','九','十'];
var statusArr = ['O','E'];
var mockData = {
"name":"我爱吃猪脚",
"areas":[]
};
var areas = mockData.areas;
for(var i = 0;i < areaCount;i++){
var areaName = ChiniseArr[i] + '号';
var area = {
"areaId": Date.now(),
"name": areaName,
"sequence": i,
"tables":[]
};
var tableCount = getRandomCount(tableCountPerAreaRandom);
log(areaName + 'tables:',tableCount);
var tables = area.tables;
for(var j = 0;j < tableCount;j++){
var seatCount = getRandomCount(seatCountRandom);
var statusIdx = getRandomCount([0,1]);
tables.push({
"id": 23,
"seatNumber": seatCount,
"name": addZero(j + 1,2),
"sequence": j,
"status": statusArr[statusIdx]
})
}
areas.push(area);
}
var jsConcent = 'window.ALL_DATA = ' + JSON.stringify(mockData, null, 4);
fs.writeFile('data-random.js', jsConcent , function (err) {//创建文件
if (err) throw err;
console.log('data created');
});
function log(){
var args = [].slice.call(arguments);
console.log.apply(console,args);
}
function getRandomCount(range){//根据给定的范围返回随机数
if(range[1] - range[0] === 1){
var r = Math.floor(Math.random() * 10);
return r % 2;
}
return Math.floor(Math.random() * (range[1] - range[0]) + range[0]);
}
function addZero(str,length){//补零操作
str += '';
return new Array(length - str.length + 1).join("0") + str;
}

其中,关键步骤在第39~43行,使用NodeJS的fs模块,将前面”造”的数据对象转化成json字符串,再与一个全局变量的复制操作拼接,最后输出到一个文件。相当于一个”用代码造代码”的过程,其实很多构建工具,本质上也就是在”造代码”科科~这里还值得一提的是,JSON.stringify这个方法的第三个参数,是用于代码缩进的,否则将没有换行与缩进,影响阅读。

我这个例子是生成js文件,然后引入到页面中。你也可以把例子里的赋值操作去掉,最终创建json文件。

好了,你可以把上面的代码拷贝到你的电脑中,执行试试看。比如,你在本地新建一个mock.js,然后把上面的代码复制进去,保存。在终端cd到这个js所在的目录,执行node mock.js即可。瞬间就会创建一个data-random.js,打开看,有1000多行代码,因为使用了随机数,每次生成结果会不同,行数也不同。这要是用手动的来,可能要疯了吧囧。其中造数据的逻辑,就可以尽情发挥了。
推荐继续阅读下一篇 使用Grunt-contrib-connect为html动态添加script标签 ,与这篇文章内容相关。

我们要学会做一个”懒人“,脏活累活都让程序去干吧~