我有一个表单,用户可以在其中添加更多作者,第一个是必需的,并且它具有自己的字段验证
当用户添加更多作者时,这些作者存储在数组中,因此,如果用户不添加更多作者,则会显示此错误消息:
"\"authors_first_name\" must be an array"
"\"authors_last_name\" must be an array"
"\"authors_country\" must be an array"
当作者不超过1位时,如何使数组可选? 但是添加作者时需要吗?
const schema = Joi.object().keys({
author_first_name: Joi.string().required().error(() => 'Author First Name is required'),
author_last_name: Joi.string().required().error(() => 'Author Last Name is required'),
author_country: Joi.string().valid(isoCodes).error(() => 'Author Country not valid'),
authors_first_name: Joi.array().items(Joi.string()).optional(),
authors_last_name: Joi.array().items(Joi.string()).optional(),
authors_country: Joi.array().items(Joi.string().valid(isoCodes).error(() => 'Country not valid')).optional()
});
我添加了.optional(),但错误不断显示
答案 0 :(得分:1)
我认为您在此处使用的方法具有误导性,即使用户仅插入一个作者或多个作者,您也应该具有对象数组。为first_name和last_name采用不同的数组可能会导致问题,例如如果您有5个first_name和6个last_name。您可以添加验证,但这仍然是一种越野车方法。您应该使用这样的架构
const schema = Joi.array().required().items(
Joi.object().required().keys({
author_first_name: Joi.string().required().error(() => 'Author First Name is required'),
author_last_name: Joi.string().required().error(() => 'Author Last Name is required'),
author_country: Joi.string().valid(isoCodes).error(() => 'Author Country not valid'),
}))
答案 1 :(得分:0)
好的,我可以使用以下代码:
const schema = Joi.object().keys({
first: Joi.array().items(Joi.string()).single(),
last: Joi.array().items(Joi.string()).single(),
country: Joi.array().items(Joi.string().valid(isoCodes)).single(),
}).assert('first.length', Joi.ref('last.length'))
.assert('last.length', Joi.ref('country.length'));
我的原始代码有两个补充: