@skiyee/verify v1.2.3
VeriFy
一个支持多类型即时串行校验器(基于async-validtor重构拓展)
🚀 功能
⚡️ 实现即时快捷的串行校验,降低冗余校验操作
🦾 在基础数据类型的基础上,拓展多样化的校验选项
☁️ 提供客户端和云端双重支持,实现全方位的校验功能
📦 安装
您可以通过 npm 安装 VeriFY:
npm i @skiyee/verify
VK-Router框架直接在router路径下,打开终端并输入以上命令安装即可
📖 使用
配合示例使用更舒服哦!
import VeriFY from '@skiyee/verify'
// const VeriFY = required('@skiyee/verify')
const rules = {
// 填充验证规则
}
// new一个该验证规则的实例
const validator = new VeriFY(rules)
const source = {
// 与规则相对应的数据源
}
// 填入数据源给其验证
validator.validate(source, (error)=>{
/**
* error有两种返回格式:
* - 验证通过返回 null
* - 验证失败返回 Array<object>
*/
})
⚙️ 属性
简介: 最基础的属性,几乎每个规则体都需要用到
是否必填
required: Boolean
value:
- true: 必填
- false: 非必填
name: { required: true, message: '姓名不能为空' }
校验类型
type: String
value:
age: { type: 'number', message: '年龄必须为数字' }
🪝 依赖属性
拓展类型编写思想:即根据实际存储的数据类型来制定相应的基础类型拓展
枚举依赖
enums: String | Array
value: 枚举内容
colors: {
required: true,
type: 'enum',
enums: 'blue' // enums: ['green', 'red']
}
对象依赖
fields: Object
value: 子项规则体
address: {
type: 'object',
fields: {
city: { type: 'string', message: '城市不能为空' },
// ...其他地址字段规则
}
}
数组依赖
fields: Object
value: 子项规则体
// Array<值类型的校验类型>: Array<string|number|...type>
grades: {
type: 'array',
allField: {
type: 'number', min: 0, max: 100, message: '成绩必须是介于0到100之间的数字'
}
}
// Array<引用类型的校验类型>: Array<object|array>
sku_list: {
type: 'array',
allField: {
type: 'object',
fields: {
id: { type: 'number', message: 'ID必须是数字' },
name: { type: 'string', message: '名称必须是字符串' },
}
}
}
指定范围
注意:目前指定范围的校验类型有:string & number & array
min: Number
max: Number
len: Number
score: { type: 'number', min: 0, max: 100, message: '成绩必须是介于0到100之间的数字' }
name: { type: 'string', len: 4, message: '名字长度必须为4个字符' }
measurements: { type: 'array', len: 10, message: '测量值数组长度必须为10' }
字符串类拓展类型
extend: String
value:
- pattern: 正则校验
- mobile: 手机号校验
name: { type: 'string', extend:'pattern', pattern: /^[A-Z]+$/, message: '姓名必须由大写字母组成' }
usermobile: { type: 'string', extend:'mobile', message: '必须是手机号码' }
数字类拓展类型
tip: 该拓展类型配合指定范围使用
注意:校验的金额值必须是乘100的(即1元=100),校验的比例值必须是除100的(即10%=0.01)
extend: String
value:
- money: 金额校验
- ratio: 比例校验
amount: { type: 'number', extend:'money', min: 50, max: 100, message: '金额必须介于50和100之间' }
percentage: { type: 'number', extend:'ratio', min: 0, max: 100, message: '任务完成百分比必须介于0%和100%之间' }
🎈 配合VK云端路由做全局检验
一、创建校验文件
在云函数(对象)同级目录下创建rules文件夹
根据云函数/云对象创建文件名(二者有区别,请看以下示例)
Path: 云函数下创建
云函数路径:user/sys/add.js 验证规则路径:user/rules/index.js
校验文件名只能是index,多个云函数对应一个校验文件
Path: 云对象下创建
云对象路径:user/sys/member.js 验证规则路径:user/rules/member.js
校验文件与云对象文件同名,一个云对象对应一个校验文件
二、添加校验规则
在已创建的校验文件里放以下代码
若是云函数该文件路径为: xxx/rules/index.js, 云对象: xxx/rules/vvv.js
const rules = {}
// 当调用某个云函数(对象)名为 add 时就触发该校验
rules.add = {
// 校验规则
}
module.exports = rules
三、编写校验工具
这是一个全局的校验,其只会校验已添加规则的云函数(对象)
// 路径:云端->router->util->pubFunction.js
// !!! 不要忘记安装VeriFY了, npm i @skiyee/verify
const Verify = require('@skiyee/verify')
pubFun.validate = function (url, sourceData) {
// 这一句是关键,code为0时才会通过校验
let res = { code: 0, msg: '通过验证' }
if (typeof url !== 'string'){
return { code: 50, msg: '规则路径参数错误' }
}
const splitType = url.includes('.') ? '.' : '/'
const urlArr = url.replace(/sys|kh|pub\b/g, 'rules').split(splitType)
const ruleName = urlArr.pop()
const rulePathStr = `service/${urlArr.join('/')}`
let rule = null
try {
rule = (vk.require(rulePathStr) || {})[ruleName]
}
catch (err) {
return res
}
if (!rule)
return res
const validator = new Verify(rule)
validator.validate(source, (err) => {
if (err !== null){
res = { code: 100, msg: err }
}
})
return res
}
四、拦截并调用工具
创建前置过滤器
// 路径:云端->router->middleware->modules->verifyFilter.js
module.exports = [
{
id: "globalValidate",
regExp: "^admin",
description: "全局校验器",
index: 310,
mode:"onActionExecuting",
main: async function(event) {
let { data = {}, url, util } = event;
let { vk } = util;
return vk.myfn.validate(url, data)
}
}
]
Hope you enjoy 💜