我正在尝试创建joi验证,如果另一个数组字段包含某些特定数据,则将需要该字段。
当前,我有以下代码:
employeeType: Joi.array().items(
Joi.string().valid(enumVars(EmployeeType)),
).required(),
w2Type: Joi.when('employeeType', {
is: Joi.array().items(Joi.string().valid(EmployeeType.w2).required()),
then: Joi.string()
.valid(Object.values(W2Type))
.required(),
otherwise: Joi.forbidden(),
}),
如果employeeType包含EmployeeType.w2,则必须为 w2Type
字段
但这不是。
答案 0 :(得分:0)
尝试以下代码。您必须按以下方式更改“ is”子句:
const Joi = require('@hapi/joi');
const schema = {
employeeType: Joi.array().items(
Joi.string().valid(['A', 'B', 'C'])).required(),
w2Type: Joi.when('employeeType', {
is: Joi.array().items(Joi.string().only('C').required(), Joi.any()),
then: Joi.string().required()
})
}
function main() {
var valid = {
employeeType: ['A', 'B'],
}
var Invalid = {
employeeType: ['A', 'C'],
}
var validOne = {
employeeType: ['A', 'C'],
w2Type: 'sometext'
}
const result1 = Joi.validate(valid, schema);
const result2 = Joi.validate(Invalid, schema);
const result3 = Joi.validate(validOne, schema);
if (result1.error != null) {
console.error(result1.error);
} else {
console.log(result1.value + ' is valid input');
}
if (result2.error != null) {
console.error(result2.error);
} else {
console.log(result2.value + ' is valid input');
}
if (result3.error != null) {
console.error(result3.error);
} else {
console.log(result3.value + ' is valid input');
}
}
main();
输出: