В справочной документации Джои говорится, что Справочник, созданный с использованием {{X0} } может ссылаться на значение из объекта контекста. any.when документация предполагает, что condition Параметр принимает ссылку. Однако я не могу заставить работать следующее простое использование:

import Joi from "joi";

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

const value = {
  year: 1999,
};

const context = {
  flag: true
};

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

Этот код приводит к прохождению проверки. Однако я ожидал, что это не удастся. Что мне не хватает?

1
Bryan 6 Окт 2020 в 01:26

1 ответ

Лучший ответ

Вам нужно использовать boolean().valid(true), чтобы передавалось только логическое значение true!

boolean().truthy() принимает список дополнительных значений, которые считаются допустимыми логическими значениями. Например. boolean().truthy('YES', 'Y'). Подробности см. В документации

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);
1
a1300 6 Окт 2020 в 08:19