README
slow-data
根据数据配置生成模拟数据。用于前端开发时模拟数据接口
安装
npm install slow-data --save
快速开始
var _SlowData = require('slow-data')
var slow = new _SlowData()
//随机生成一个字符串,具体规则见下文。
console.log( slow.gen("$string") )
console.log( slow.gen("$number") )
var obj = {
name: "$string(6, 12)"
age: "$number(1,100)"
}
//生成一个对象, 其中name为6到12字符的字符串, age为0到100的随机整数
console.log( slow.genObject(obj) )
API
如果API解释不清楚,可以对照下面的实例进行理解。
class SlowData
构造函数
SlowData(schemaDirectory, options)
@params schemaDirectory String,optional
数据模板module所在的文件夹(绝对路径).
@params options Object, optional
数据模板的一些配置。
options.templateEnable
Object, 可选参数。配置 启动哪些数据生产函数。默认情况下,启用所有。
options.templateAvailable
Array<String> 或 String。 可选参数。 主要配置自定义的模板生产函数所在的文件夹
成员函数
setOptions(options)
options 同 构造函数里面的options。用于配置SlowData
gen(expression, context) (核心)
根据模拟数据的表达式 生成相关模拟数据。
@expression.
模拟数据的表达式。具体见下文 基本模拟数据类型。
Regexp 或 String 必选参数
根据定义的正则表示式 或者 基本模拟数据类型的字符串 生产相关随机数据。
@context.
产生模拟数据时的上下文。
Object 可选参数
genObject(bean, context) (核心)
基于对 gen 的封装, 生产相关模拟数据对象。
@bean
包含模拟数据表达式的对象。Object 必选参数
@context.
生产模拟数据时的上下文环境。 可选
build(schema, context) (核心)
基于对 genObject 的封装。 生成一组模拟数据。
@schema。 模拟数据数组的相关内容设置。
Object 或 string。 必选。包含规定字段格式的object对象 或者对象的名字。
@context. 生产模拟数据时的上下文环境。 可选
实例
对gen的应用
对genObject的应用
对build的应用
基本模拟数据类型
约定
- 以 $ 开始的为单一的数据类型
- 以 $ 为组合数据类型 (多个单一的数据类型组合)
- 以 @ 开始的为上下文属性
- 以 @@ 开始的为 对上下文属性的进一步 操作
String
$string(min, max, special, number, sensitive)
min: 最小长度 默认值 6
max: 最大长度 当max不存在时 min=max, min==max当时,产生固定长度的字符串
special: 是否允许特殊字符 如:#!@等 默认true
number: 是否包含数字 默认 ture
sensitive: [1 | 0]是否全部大写或小写 1 大写 , 0 小写, 默认随机,不区分
例如:
slowData = new SlowData()
slowData.gen('$string(5)')
slowData.gen('$string(4, 10)')
slowData.gen('$string(5, 5, false, 1)')
number
$number(min, max, fixed)
min: 最小值 default -Math.power(2, 32)
max: 最大值 default Math.power(2, 32)
fixed: 保留的小数位数 default 0
当只有min一个参数时, 则min为最大值。 即 $number(a)产生 [-Math.power(2, 32), a]之间的随机值
例如:
slowData.gen('$number(10)')
slowData.gen('$number(0, 20)')
slowData.gen('$number(0, 20, 2)')
reg
reg: 正则表达式
slowData.gen(/([a-z]|[A-Z]){3,7}/)
regexp(reg)
regStr: 正则表达式字符串 ,注意区别于reg
reg是一个RegExp对象。这里的是个字符串
slowData.gen("$regexp([(a-z)]{4,5})")
date(start, step, format)
生成日期。 如果没有任何参数, 则默认为当前日期。
当处在批量数据里面时, start, step, format参数起作用。 也就是说,当你需要生成一个数组的数据时, 需要根据索引来规定每个时间的间隔,那么可以使用上面上个参数。
其中start 和format 配合使用。 start 规定 开始的日期, 类型是字符串,默认格式是YYYY-MM-DD HH:mm:ss 比如说,你填的开始日期是 2014年12月5日,这个时候,你就 需要进行 格式设置了 format 设置为 'YYYY年MM月DD日',如果你按照默认格式 填写开始日期如:"2014-12-30 00:00:00"那么就不需要设置format 参数了。format 格式如下:(更详细可参考momenjs http://momentjs.com/)
Input | Example | Description |
---|---|---|
YYYY | 2014 | 4 digit year |
YY | 14 | 2 digit year |
Q | 1..4 | Quarter of year. Sets month to first month in quarter. |
M MM | 1..12 | Month number |
MMM MMMM | January..Dec | Month name in locale set by moment.locale() |
D DD | 1..31 | Day of month |
step的设置是每个索引的间隔 .可以使用表达式 如: -1d12h 索引每次向前1,则时间递减12小时 (当然其实和-12h效果一样。12的前面省略了+号),表达式如下:
Key | Shorthand |
---|---|
years | y |
months | M |
weeks | w |
days | d |
hours | h |
minutes | m |
seconds | s |
milliseconds | ms |
time
参考正则表达式
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:\n\s*\r
匹配Email地址的正则表达式:\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]* 评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7} 评注:匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号:[1-9][0-9]{4,} 评注:腾讯QQ号从10000开始
匹配中国邮政编码:[1-9]\d{5}(?!\d) 评注:中国邮政编码为6位数字
匹配身份证:\d{15}|\d{18} 评注:中国的身份证为15位或18位
匹配ip地址:\d+.\d+.\d+.\d+ 评注:提取ip地址时有用
匹配特定数字: ^[1-9]\d*$ //匹配正整数 ^-[1-9]\d*$ //匹配负整数 ^-?[1-9]\d*$ //匹配整数 ^[1-9]\d*|0$ //匹配非负整数(正整数 + 0) ^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0) ^[1-9]\d*.\d*|0.\d*[1-9]\d*$ //匹配正浮点数 ^-([1-9]\d*.\d*|0.\d*[1-9]\d*)$ //匹配负浮点数 ^-?([1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0)$ //匹配浮点数 ^[1-9]\d*.\d*|0.\d*[1-9]\d*|0?.0+|0$ //匹配非负浮点数(正浮点数 + 0) ^(-([1-9]\d*.\d*|0.\d*[1-9]\d*))|0?.0+|0$ //匹配非正浮点数(负浮点数 + 0) 评注:处理大量数据时有用,具体应用时注意修正
匹配特定字符串: ^[A-Za-z]+$ //匹配由26个英文字母组成的字符串 ^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串 ^[a-z]+$ //匹配由26个英文字母的小写组成的字符串 ^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串 ^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串