如何根据上下文中的值建立Joi when条件?

问题描述

Joi的ref documentation建议使用rearrange_model_factors创建的引用可以引用上下文对象中的值。 Joi的any.when documentation建议Joi.ref参数接受一个引用。但是,我无法使用以下简单用法

condition

代码将导致通过验证。但是,我希望它会失败。我想念什么?

解决方法

您需要使用boolean().valid(true),以便仅布尔值true通过!

boolean().truthy()接受其他值的列表,这些值被视为有效布尔值。例如。 boolean().truthy('YES','Y')Documentation

中的详细信息

joi版本: 17.2.1

const Joi = require('joi');

const schema = Joi.object({
  year: Joi.number().when(
    Joi.ref('$flag'),{
      is: Joi.boolean().valid(true),then: Joi.number().min(2000),},),});

const value = {
  year: 1999,};

// fails
const context = {
  flag: true
};

// passes
const context = {
  flag: false
};

const result = schema.validate(value,{ context });
console.log(result.error);