[英]Joi not accepting correct string value with valid ()
我有一个带有下拉输入的表单,因此该输入的选项已经设置。
问题是输入的值,尽管是正确的,并且在模式的接受值内,但我收到了消息,即Provider must be one of [[object Set], [object Set]]
。
最奇怪的是这个问题在生产中发生,但在localhost
我没有收到这个验证错误。
schema
provider
密钥:
provider: Joi.string().required().label('Provider').when('entitlementType', {
is: 'Offer',
then: Joi.string().valid(...providersForSubscriptions),
otherwise: Joi.string().valid(...providersForProducts),
}),
providersForSubscriptions
数组:
[
"RBL",
]
providersForProducts
数组:
[
"RBL",
"content-store",
"zencore",
"VIP"
]
正如您所看到的,这是一个非常简单的验证,它将接收一些provider
值,如果它在valid
数组中,则将接受该值。
在浏览器中记录表单。
console.log(entitlementType, provider, providersForProducts);
这是输出:
发生什么了? 如果我们从验证警告中检查context
,则输入值为zencore
并且zencore
被视为有效值。
有什么想法吗? 我应该尝试重构架构吗? 为什么这只是产品?
从您的架构:
provider: Joi.string().required().label('Provider').when('entitlementType', {
is: 'Offer',
then: Joi.string().valid(...providersForSubscriptions),
otherwise: Joi.string().valid(...providersForProducts),
}),
和您的输出,我们可以看到entitlementType
不是 offer。 所以这意味着
Joi.string().valid(...providersForProducts),
正在用于此特定字段的验证。
我们还可以看到错误Provider must be one of [[object Set], [object Set]]
这意味着 Joi 正在检查一组集合。
这将我们指向providersForProducts
作为罪魁祸首。
为什么是一个集合数组? 谁知道。 记录该值以进行确认,然后返回以查看它为何如此设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.