Joi模块简介
我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证。然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式也许可以一步到位,但是他只会给你true or false,如果想要知道数据不符合哪些条件时,那么你要进一步判断,下面和大家分享一种可读性和易用性更好的实现方法。
Joi 是 hapijs 自带的数据校验模块,他已经高度封装常用的校验功能,JavaScript对象的规则描述语言和验证器。是本文就是介绍如何优雅地使用 joi 对数据进行校验。相信你会喜欢上它。
Joi模块基础使用
// 引入joi模块
const Joi = require('joi');
// 定义对象的验证规则
const schema = {
username: Joi.string().min(2).max(5).required().error(new Error('username属性没有通过验证')),
birth: Joi.number().min(1900).max(2020).error(new Error('birth没有通过验证'))
};
async function run () {
try {
// 实施验证
await Joi.validate({username: 'ab', birth: 1800}, schema);
}catch (ex) {
console.log(ex.message);
return;
}
console.log('验证通过')
}
run();
以上scheme配置大致意思如下:
username: 字符串类型,长度在2至5之间,必填,自定义错误信息。
birth: 数字类型, 值在1900到2020之间,可选,自定义错误信息。
成功通过校验结果:
校验结果不通过:
这种极简易读的表达方式让你轻松快速实现校验功能,不需要 if else。这就是配置大于编码的魅力。
Joi模块更多使用方式
joi 不仅仅作用于scheme对象,而且还可以单独使用,比如:
Joi.string().validate(666666); //error: ValidationError: "value" must be a string
Joi.string().validate('hehe'); // pass
有时一些意外的字段被传进来,会导致校验不通过,但你又不在乎这些多余的字段,可以这样配置:
Joi.validate({y: 3}, {x: Joi.string()}); // [ValidationError: "y" is not allowed]
Joi.validate({y: 3}, {x: Joi.string()}, {allowUnknown: true}); // pass, 配置 {allowUnknown: true}
除了表单常用的数值,布尔类型等,也可以校验函数类型:
var myObject = {
a: 123,
b: function () { }
}
var schema = {
a: Joi.number().integer(),
b: Joi.func()
}
Joi.validate(myObject, schema);
//pass
除此之外,还有更多类型Joi.any(), Joi.array(), Joi.boolean(), Joi.date(), Joi.func(), Joi.number(), Joi.object(), Joi.string()
来源:CSDN
作者:司~夏
链接:https://blog.csdn.net/qq_44721831/article/details/104184263