【问题标题】:Joi conditional validation, if array contains valueJoi条件验证,如果数组包含值
【发布时间】:2019-08-22 14:26:48
【问题描述】:

如果另一个数组字段包含某些特定数据,我正在尝试创建将需要字段的 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 应该是必填字段 但事实并非如此。

【问题讨论】:

    标签: javascript typescript joi


    【解决方案1】:

    试试下面的代码。您必须按如下方式更改 `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();
    

    输出:

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 1970-01-01
      • 2022-07-27
      • 1970-01-01
      • 2021-02-05
      • 2014-12-18
      • 2017-07-28
      • 2020-05-08
      • 1970-01-01
      相关资源
      最近更新 更多