发布
社区首页 >问答首页 >基于另一字段的一组值的Joi字段验证

基于另一字段的一组值的Joi字段验证
EN

Stack Overflow用户
提问于 2020-05-20 11:44:33
回答 1查看 7.2K关注 0票数 7

我试图基于另一个字段的一组值来验证对象中的字段。假设我的对象必须字段,field1field2。字段一可以取值A,B,C,D,E,F,H,I。如果field1是其中的任何一个,那么field2应该是空的。我该怎么做。我认为应该在下面有synthax,但我不知道如何完全实现它。

代码语言:javascript
代码运行次数:0
复制
const mySchema = Joi.object({
   field1: Joi.string().valid('A','B','C','D','E','F','H','I').required(),
   field2: Joi.when('field1', is: <A or B or C or H> then: <field2 should be null> otherwise: Joi.date().required())
});

NB:,我在使用"@hapi/joi": "^17.1.1"

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-20 12:28:19

我终于尝试了:

代码语言:javascript
代码运行次数:0
复制
const Joi = require("@hapi/joi");

const schema = Joi.object({
    field1: Joi.string().valid('A', 'B', 'C', 'D', 'E', 'F', 'H', 'I').required(),
    field2: Joi.when('field1', {
        is: Joi.string().valid('A', 'B', 'C', 'H'),
        then: Joi.valid(null),
        otherwise: Joi.date().required(),
    }),
});

const validation = [schema.validate({ field1: 'B', field2: null }), schema.validate({ field1: 'E', field2: null }),
                    schema.validate({ field1: 'E', field2: Date() }), schema.validate({ field1: 'A', field2: Date() })];

validation.forEach((v)=>{
    if(v.error){
        console.log(JSON.stringify(v.error));
    }else{
        console.log(JSON.stringify(v.value));
    }
});

这是输出。

代码语言:javascript
代码运行次数:0
复制
{"field1":"B","field2":null}
{"_original":{"field1":"E","field2":null},"details":[{"message":"\"field2\" must be a valid date","path":["field2"],"type":"date.base","context":{"label":"field2","value":null,"key":"field2"}}]}
{"field1":"E","field2":"2020-05-20T12:26:48.000Z"}
{"_original":{"field1":"A","field2":"Wed May 20 2020 13:26:48 GMT+0100 (West Africa Standard Time)"},"details":[{"message":"\"field2\" must be [null]","path":["field2"],"type":"any.only","context":{"valids":[null],"label":"field2","value":"Wed May 20 2020 13:26:48 GMT+0100 (West Africa Standard Time)","key":"field2"}}]}
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61912282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档