web-dev-qa-db-ja.com

配列のJoi検証

配列が1つのケースで0個以上の文字列を持ち、別のケースで0個以上のオブジェクトを持つことを検証しようとして、Joi docsと苦労しています:(

validate: {
        headers: Joi.object({
                'content-type': "application/vnd.api+json",
                accept: "application/vnd.api+json"
        }).options({ allowUnknown: true }),
        payload : Joi.object().keys({
            data : Joi.object().keys({
                type: Joi.any().allow('BY_TEMPLATE').required(),
                attributes: Joi.object({
                    to : Joi.string().email().required(),
                    templateId : Joi.string().required(),
                    categories : Joi.array().items( //trying to validate here that each element is a string),
                    variables : Joi.array({
                        //also trying to validate here that each element is an Object with one key and value
                    })
                })
            }).required()
        })
    }
33
1977

Joi.array().items()は、配列要素に対して使用する別のJoiスキーマを受け入れます。したがって、文字列の配列は次のように簡単です。

Joi.array().items(Joi.string())

オブジェクトの配列についても同じです。オブジェクトスキーマをitems()に渡すだけです:

Joi.array().items(Joi.object({
    // Object schema
}))
82
cdhowie

これを試すことができます:

function(data){
const Schema = {

categories: Joi.array().items(Joi.string()),
variables: Joi.array().items(Joi.object().keys().min(1))

}

return Joi.validate(data, Schema)

}
0
Ravi