Как изменить существующие ключи в объекте Joi - PullRequest
0 голосов
/ 30 января 2019

Проверка Joi не поддерживает изменение существующих ключей объекта.

Я использую проверку Joi для родительских и дочерних классов.Проверка для родителя является базовой проверкой для всех детей, но у каждого ребенка есть определенные ограничения или дополнительные поля.Я хочу иметь возможность просто взять мой родительский объект Joi и иметь возможность изменять существующие ключи, чтобы соответствовать определенным ограничениям.

//Declare base class with an array at most 10 elements
const parent = {
    myArray: Joi.array().max(10)
}
//Now declare child with minimum 1 array value
const child = parent.append({
    foo: Joi.string(),
    myArray: Joi.array().min(1).required()
})

Приведенный выше код работает, как и ожидалось, то есть дочерний объект не сохраняет .limit(10) ограничение применяется к родителю.Но я хочу, чтобы это было так.Я уверен, что append - неправильная функция для использования здесь, но я не уверен, как это сделать.Я хочу, чтобы моя полученная дочерняя проверка выглядела так:

const child = {
    foo: Joi.string(),
    myArray: Joi.array().max(10).min(1).required()
}

1 Ответ

0 голосов
/ 30 января 2019

Вы пробовали:

const child = parent.append({
    foo: Joi.string(),
    myArray: parent.myArray.min(1).required()
});

Только что попробовали:

const Joi = require('joi');

const parent = {
  x: Joi.array().max(10).required()
};

const child = Object.assign({}, parent, {
  x: parent.x.min(1).required(),
  y: Joi.string()
});

Joi.validate({
  x: [],
  y: 'abc'
}, child); // fails as .min(1) not satisfied

Joi.validate({
  x: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
  y: 'abc'
}, child); // fails as .max(10) not satisfied

Joi.validate({
  x: [1],
  y: 'abc'
}, child); // OK

Пробовал со свежим npm i joi (пакет говорит: "joi": "^14.3.1") на узле v8.10.0.Или, может быть, приведенный вами пример слишком тривиален, чтобы отразить ваш реальный сценарий?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...