📅  最后修改于: 2023-12-03 15:02:08.566000             🧑  作者: Mango
Joi 是一个 JavaScript 数据验证库,可以用于对表单数据、API 请求或其他任何 JavaScript 数据进行验证。它提供了一种简单且灵活的方式来定义验证规则并进行数据验证,同时提供了丰富的错误信息,能够很好地帮助用户理解验证失败的原因。
可以使用 npm 或 yarn 安装 Joi:
npm install joi
# 或
yarn add joi
要使用 Joi 进行数据验证,需要导入库并定义规则。Joi 具有精细的、可组合的规则体系,可以轻松地定义验证规则。
以下是一个简单的示例,使用 Joi 验证一个对象:
const Joi = require("joi");
const schema = Joi.object({
name: Joi.string().min(3).required(),
age: Joi.number().integer().min(18).max(99),
});
const result = schema.validate({ name: "John", age: 25 });
if (result.error) {
console.error(result.error.details[0]);
} else {
console.log(result.value);
}
在上面的示例中,我们定义了一个包含两个字段的对象,其中 name
必须是一个长度至少为 3 的字符串,并且 age
可选,但如果提供了,则必须是介于 18 和 99 之间的整数。然后使用 schema.validate
方法对该对象进行验证,并检查验证结果是成功还是失败。
Joi 具有许多可用的规则,这里只列出了一些常用的规则:
Joi.any()
:接受任何数据类型。Joi.array()
:接受一个数组。Joi.boolean()
:只接受布尔值。Joi.date()
:只接受日期对象或字符串,能够识别多达 30 种日期格式。Joi.number()
:只接受数字类型。Joi.object()
:只接受对象,并可以定义对象属性及其规则。Joi.string()
:只接受字符串类型。Joi 还具有一些修饰符,可以对规则进行修改和扩展:
.allow(value)
:允许值为指定的值。.forbidden()
:值必须不存在。.invalid(value)
:值不可为指定的值。.optional()
:值可选,等效于 .allow(null).allow(undefined)
。.required()
:值必须存在。.default(value)
:如果值不存在,则使用默认值。.label(name)
:用于更改规则名称。如果 Joi 已有的规则无法满足需求,还可以定义自定义规则。以下是一个简单的示例:
const validatePassword = (value, helpers) => {
if (value.length < 8) {
return helpers.message("密码长度不能少于8个字符");
}
if (!value.match(/[A-Z]/)) {
return helpers.message("密码必须包含至少一个大写字母");
}
return value;
};
const schema = Joi.string().custom(validatePassword, "自定义密码规则");
const result = schema.validate("abc123");
if (result.error) {
console.error(result.error.details[0].message);
} else {
console.log(result.value);
}
在上面的示例中,我们定义了一个自定义规则 validatePassword
,将用于验证密码。如果密码长度少于 8 个字符,或者不包含至少一个大写字母,则返回错误。
Joi 返回的验证结果是一个对象,包含两个字段:error
和 value
,如下:
const result = schema.validate(data);
if (result.error) {
// 根据需要处理错误
} else {
// 使用验证通过的数据进行下一步操作
}
如果 result.error
不为空,则验证失败,这时可以从 result.error
中获取详细的错误信息。
Joi 是一个非常有用的 JavaScript 数据验证库,可以轻松地验证表单数据、API 请求或其他任何 JavaScript 数据。其规则非常灵活,自定义规则功能也非常强大,是一个很好的数据验证解决方案。