Joiでネストされたスキーマを作成しようとしていますが、エラーがスローされます
[エラー:オブジェクトスキーマをjoiスキーマにすることはできません]
var nestedSchema = joi.object({
b: joi.number()
});
var base = joi.object({
a: joi.string(),
nestedData:joi.object(nestedSchema)
});
Joiでネストされたスキーマを定義するにはどうすればよいですか?
object.keys APIを使用できます
var nestedSchema = joi.object().keys({
b: joi.number()
});
var base = joi.object({
a: joi.string(),
nestedData: nestedSchema
});
Francescoの答えは機能しますが、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)
フランチェスコの承認された回答に基づくヒント:
「nestedData」が必要な場合->「base」の「nestedData:nestedSchema.required()」は機能しません。他のパラメータと同様に、「nestedSchema」に直接設定する必要があります
var nestedSchema = joi.object().keys({
b: joi.number()
})
.required();
var base = joi.object({
a: joi.string(),
nestedData: nestedSchema
});