check-depends
数据对象检查、验证,灵感来自于 MongoDB 查询语法。
用法
const checkDepends = require('check-depends');
const data = {
name: 'Alaska',
license: 'MIT',
author: 'Liang',
tags: ['web', 'app'],
numbers: [0, 15, 20],
empty: [],
obj: {},
object: { attr: 1, foo: 'bar' },
regexp: '/Alaska/',
from: 2016,
awesome: true,
bugs: 0,
zero: 0,
one: 1,
no: false,
others: null,
undefined: undefined
};
checkDepends('name', data);
checkDepends('!name', data);
checkDepends('others', data);
checkDepends({ name: 'Alaska' }, data);
checkDepends({ 'name.length': 6 }, data);
checkDepends({ name: ':regexp' }, data);
checkDepends({ from: { $gt: 2015 } }, data);
checkDepends({ tags: /web/ }, data);
checkDepends({ obj: {} }, data);
checkDepends({ object: { attr: 1, foo: 'bar' } }, data);
checkDepends({ 'object.foo': 'bar' }, data);
checkDepends({ numbers: { $all: [15, 20] } }, data);
checkDepends({ 'tags.length': 2 }, data);
checkDepends({ $or: [{ name: '/alaska/i' }, { no: true }] }, data);
checkDepends({ $jsonSchema: {} });
checkDepends({ $jsonSchema: { properties: { name: { type: 'number' } } } });
已支持的MongoDB查询操作:
和MongoDB的差异
- MongoDB中一般不同类型比较会返回false,而JS则会类型转换,但是undefined不会转换
- MongoDB中不存在的值可以用null匹配,而JS中不存在的值只能用undefined匹配
- MongoDB中undefined等于null,而JS中undefined不等于null
- MongoDB中不能查询undefined
- check-depends 中可以用字符串表示正则
- MongoDB支持JSON Schema draft 4,check-depends 使用AJV验证JSON Schema
- check-depends 中
:
开头的字符串 :key
,代表data值引用
- check-depends 支持 string.length 和 array.length 查询
差异举例:
1 > false | false | true |
0 >= null | false | true |
false >= null | false | true |
1 >= null | false | true |
0 >= false | false | true |
1 >= false | false | true |
1 >= true | false | true |
0 >= '' | false | true |
undefined = null | true | false |
undefined >= null | true | false |
undefined <= null | true | false |
undefined >=0 | false | false |
"/abc/i" | string | RegExp |
$jsonSchema: {name:{type:'number'}} | Error(' Unknown keyword: name') | true |