Joi 验证 - 如何根据数组中存在的另一个键要求或可选字段

编程代码

1个回答

写回答

Catherine_snow

2025-06-20 02:30

+ 关注

Java
Java

使用 Joi 验证库可以轻松地对 JavaScript 对象进行验证,以确保其符合指定的规则。在某些情况下,我们可能需要根据数组中存在的另一个键来要求或可选特定字段。这种情况下,我们可以使用 Joi 的 when 方法来实现此功能。

使用 when 方法实现根据数组中存在的另一个键要求或可选字段

当我们需要根据数组中存在的另一个键来要求或可选特定字段时,我们可以使用 Joi 的 when 方法结合条件来定义验证规则。当满足特定条件时,我们可以指定需要的字段,否则,我们可以将其设置为可选字段。

在下面的例子中,我们有一个名为 user 的对象,它包含一个名为 roles 的数组。我们希望根据 roles 数组中是否包含 "admin" 来决定是否要求或可选字段 "secretKey"。

Javascript

const Joi = require('joi');

const schema = Joi.object({

roles: Joi.array().items(Joi.string()),

secretKey: Joi.string().when('roles', {

is: Joi.array().items(Joi.string().valid('admin')).required(),

then: Joi.required(),

otherwise: Joi.optional()

})

});

const validUser = {

roles: ['admin'],

secretKey: 'abc123'

};

const invalidUser = {

roles: ['user'],

secretKey: 'abc123'

};

console.log(schema.validate(validUser)); // { value: { roles: ['admin'], secretKey: 'abc123' } }

console.log(schema.validate(invalidUser)); // { value: { roles: ['user'], secretKey: undefined } }

在上面的例子中,当 roles 数组中包含 "admin" 时,我们要求 "secretKey" 字段,并且该字段的值必须是一个字符串。如果 roles 数组中不包含 "admin",则 "secretKey" 字段是可选的。

当我们验证 validUser 对象时,它符合规则,因为 roles 数组中包含 "admin",并且 secretKey 的值为 "abc123"。因此,验证结果显示了正确的值。

然而,当我们验证 invalidUser 对象时,它不符合规则,因为 roles 数组中不包含 "admin"。因此,验证结果显示了 secretKey 字段的值为 undefined,这意味着它是可选的。

使用 Joi 的 when 方法,我们可以根据数组中存在的另一个键来要求或可选特定字段。通过结合条件,我们可以定义验证规则,以确保对象的属性符合我们的要求。这种灵活性使得 Joi 成为一个强大的验证库,可以满足各种复杂的验证需求。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号