繁体   English   中英

Joi 不接受带有有效 () 的正确字符串值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM