📜  Joi 验证 - Javascript (1)

📅  最后修改于: 2023-12-03 15:02:08.566000             🧑  作者: Mango

Joi 验证 - JavaScript

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 返回的验证结果是一个对象,包含两个字段:errorvalue,如下:

const result = schema.validate(data);

if (result.error) {
  // 根据需要处理错误
} else {
  // 使用验证通过的数据进行下一步操作
}

如果 result.error 不为空,则验证失败,这时可以从 result.error 中获取详细的错误信息。

总结

Joi 是一个非常有用的 JavaScript 数据验证库,可以轻松地验证表单数据、API 请求或其他任何 JavaScript 数据。其规则非常灵活,自定义规则功能也非常强大,是一个很好的数据验证解决方案。