NodeJS Joi如何要求两个字段要么为空要么有值?

2jcobegt  于 2023-08-04  发布在  Node.js
关注(0)|答案(1)|浏览(147)

我使用Joi验证库来验证一个validTime对象,该对象具有fromto字段。我想确保如果to字段为空而from字段不为空,则会抛出错误。
以下是我当前的schema:

Joi.object({
  from: Joi.string().regex(/^([01]?\d|2[0-3]):([0-5]\d)$/).when("to", {
    is: "",
    then: Joi.string().trim().empty().required(),
    otherwise: Joi.required(),
  }),
  to: Joi.string().regex(/^([01]?\d|2[0-3]):([0-5]\d)$/).allow(""),
})

字符串
使用此模式,如果to字段有值而from字段为空,则会抛出错误。但是,如果to字段为空,而from字段不为空,则不会抛出错误。
to字段为空而from字段不为空时,如何修改此模式以抛出错误?

ybzsozfc

ybzsozfc1#

尝试此解决方案,它在我这边有效

const Joi = require('joi');

const validTimeSchema = Joi.object({
  from: Joi.string()
    .regex(/^([01]?\d|2[0-3]):([0-5]\d)$/)
    .when('to', {
      is: '',
      then: Joi.string().trim().empty().required(),
      otherwise: Joi.required(),
    })
    .custom((value, helper) => {
      if (value !== '' && !helper.schema.$_terms.whens.to.is) {
        return helper.error('any.invalid');
      }
      return value;
    }),
  to: Joi.string().regex(/^([01]?\d|2[0-3]):([0-5]\d)$/).allow(''),
});

// Example usage
const data = {
  from: '10:00',
  to: '',
};

const result = validTimeSchema.validate(data);
console.log(result);

字符串

相关问题