试图验证一个数组在一个案例中有零个或多个字符串,并且它在另一个案例中有零个或多个对象,与Joi文档挣扎:(
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()
})
}
Run Code Online (Sandbox Code Playgroud)
cdh*_*wie 90
Joi.array().items()
接受另一个Joi模式用于对付数组元素.所以字符串数组很简单:
Joi.array().items(Joi.string())
Run Code Online (Sandbox Code Playgroud)
对于一组对象也是如此; 只需将对象架构传递给items()
:
Joi.array().items(Joi.object({
// Object schema
}))
Run Code Online (Sandbox Code Playgroud)
Rav*_*ngh 10
你可以试试这个:
function(data) {
const Schema = {
categories: Joi.array().items(Joi.string()),
variables: Joi.array().items(Joi.object().keys().min(1))
}
return Joi.validate(data, Schema)
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请查看此 repo:https : //github.com/raysk4ever/nodejs_withMongoRefArray
如果要在 Joi 中验证字符串数组:
Joi.array().items(Joi.string().valid("item1", "item2", "item3", "item4"))
您也可以尝试这种方式,我已经使用了很长时间并且对我来说效果很好。
如果您的数组是对象数组,请使用以下对象:
const Joi = require('joi');
let schema = Joi.object().keys({
items: Joi.array().items(
Joi.object({
item_id: Joi.number().required(),
item_qty: Joi.number().required(),
item_type_id: Joi.number().required(),
item_qty: Joi.number().required(),
base_price: Joi.number().required(),
actual_price: Joi.number().required(),
})
).required(),
});
let errors = Joi.validate(req.body, schema);
Run Code Online (Sandbox Code Playgroud)
如果你的数组是简单的数组而不是:
let schema = Joi.object().keys({
items: Joi.array().items(
Joi.number().required()
).min(10).required(),
});
Run Code Online (Sandbox Code Playgroud)