Вложенная схема Joi

Я пытаюсь создать вложенную схему в joi, и она выдает ошибку

[Ошибка: схема объекта не может быть схемой joi]

var nestedSchema = joi.object({
    b: joi.number()
});

var base = joi.object({
    a: joi.string(),
    nestedData:joi.object(nestedSchema)
});

Как мне определить вложенную схему в joi?


person Anshul    schedule 20.04.2016    source источник


Ответы (3)


Вы можете использовать object.keys API

var nestedSchema = joi.object().keys({
    b: joi.number()
});

var base = joi.object({
    a: joi.string(),
    nestedData: nestedSchema
});
person Francesco Pezzella    schedule 20.04.2016
comment
Спасибо ... но есть опечатка. Это должны быть ключи joi.object (). Вместо joi.object.keys - person Anshul; 20.04.2016

Хотя ответ Франческо работает, нет необходимости использовать object.keys(). Ошибка, которую делал создатель вопроса, заключалась в передаче схемы в качестве параметра joi.object().

Итак, создание вложенных схем так же просто, как присвоение схемы ключу, принадлежащему другой схеме.

const schemaA = Joi.string()
const schemaB = Joi.object({ keyB1: schemaA, keyB2: Joi.number() })
const schemaC = Joi.object({
  keyC1: Joi.string(),
  keyC2: schemaB  
})

Joi.validate({ keyC1: 'joi', keyC2: { keyB1: 'rocks!', keyB2: 3 } }, schemaC)
person Túbal Martín    schedule 03.03.2017
comment
Используя этот метод, как бы вы потребовали keyB1:? - person Matt Weber; 10.01.2020
comment
Это должен быть принятый ответ - person fmagno; 21.02.2021

просто совет, основанный на принятом ответе Франческо:

если вам требуется «nestedData» -> «nestedData: nestedSchema.required ()» в «base» не будет работать, вам нужно установить его непосредственно в «nestedSchema», как и любой другой параметр.

    var nestedSchema = joi.object().keys({
        b: joi.number()
    })
    .required();

    var base = joi.object({
        a: joi.string(),
        nestedData: nestedSchema
    });
person fkvestak    schedule 23.01.2019
comment
nestedSchema().required() должно работать? - person kuzdogan; 07.05.2021