📜  Joi 验证“Joi.when()” - Javascript (1)

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

Joi 验证 - Joi.when() - Javascript

Joi 是一个基于 Node.js 的强大的验证库,可以对 JavaScript 对象进行各种严格的验证。Joi.when() 方法允许您基于其他键或值在 schema 中不同验证逻辑。

安装

使用 npm 安装:

npm install joi

然后在项目中导入:

const Joi = require('joi');
使用

下面是一个使用 Joi.when() 验证一个对象的示例。在这个示例中,Joi.when() 方法允许我们基于 target 值是否为 true 或 false 而采用不同的验证逻辑:

const schema = Joi.object({
  target: Joi.boolean(),
  value: Joi.any().when('target', {
    is: true,
    then: Joi.required(),
    otherwise: Joi.forbidden()
  })
});

const validObject1 = { target: true, value: 'some value' };
const validObject2 = { target: false };
const invalidObject1 = { target: true };
const invalidObject2 = { target: false, value: 'some value' };

console.log(schema.validate(validObject1));
console.log(schema.validate(validObject2));
console.log(schema.validate(invalidObject1));
console.log(schema.validate(invalidObject2));

运行上面的代码会输出以下内容:

{ value: { error: null, value: 'some value' } }
{ value: { value: undefined, error: null } }
{ value: { error: [ValidationError], value: { target: true } } }
{ value: { error: [ValidationError], value: { target: false, value: 'some value' } } }

在上面的示例中,validObject1 和 validObject2 符合验证规则,因此 validate() 方法返回一个包含 value 属性的对象。而 invalidObject1 和 invalidObject2 都不符合验证规则,因此 validate() 方法返回一个包含 error 属性的对象。

Joi.when() 方法参数

Joi.when() 方法的第一个参数是一个字符串,用于指定要检查的键的名称。第二个参数是一个对象,用于指定验证逻辑。该对象有以下属性:

  • is:一个函数或值,表示要检查的键的值。
  • then:一个 Joi 对象或函数,表示如果 is 的值为 true 时执行的 Joo 验证规则。
  • otherwise:一个 Joi 对象或函数,表示如果 is 的值为 false 时执行的 Joo 验证规则。
验证逻辑

在上面的示例中,通过在 value 字段上使用 Joi.any().when() 方法,我们创建了一个基于其他键或值的验证逻辑。这种逻辑允许我们根据输入数据的条件来区别处理。在这个示例中,我们指定了两种不同的情况:

  1. 当 target 值为 true 时,value 值必须存在(即 Joi.required())。
  2. 当 target 值为 false 时,value 值必须不存在(即 Joi.forbidden())。

这种技术可以帮助我们处理各种不同的情况。例如,可以使用它来执行更多自定义的验证逻辑,或者只是基于一些条件来规定输入数据应具有的某些属性或默认值。

结论

Joi.when() 方法是为大型或复杂的数据验证方案中提供更好的控制和灵活性的一种工具。它是一个强大的验证方法,可以根据您的需要创建任何逻辑。

除此之外,Joi 还提供了一些其他类型的验证规则,如数组验证、字符串验证、日期验证等等。如果您正在寻找一个更全面、更灵活和更直观的验证库,那么 Joi 就是您的首选。