gpt4 book ai didi

javascript - 使用 Joi 库进行复杂验证

转载 作者:行者123 更新时间:2023-11-30 19:41:29 24 4
gpt4 key购买 nike

我有这个 json:

let purchaseSubscription = {
'metadata': {
'eventName': 'PurchaseSubscription',
'type': 'setup' // setup, repurchase or recurring
},
'data': {
'subscriptionId': '447481',
'subscriptionTrialId': '23542'
}
};

如果 metadata.type 具有值 setup那么 data.subscriptionTrialId 应该被验证是否存在并且是一个数字。如果 metadata.type 有其他值,则可以忽略 data.subscriptionTrialId

这是我目前拥有的:

const Joi = require('joi');
const validTypes = ['setup', 'repurchase', 'recurring'];

exports.schema = Joi.object().keys({
metadata: Joi.object({
eventName: Joi.string().required(),
type: Joi.string().valid(validTypes).required()
}).required(),
data: Joi.object({
subscriptionId: Joi.number().integer().min(1).max(2147483647).required(),
subscriptionTrialId: Joi.when(
'metadata.type', { is: 'setup', then: Joi.required() })
}).required()
}).options({ 'allowUnknown': true });

但我没有得到想要的结果。 data.subscriptionTrialId 始终经过验证,无论我在 metadata.type

下有什么

我尝试阅读 documentation , 但无法正常工作 :(

最佳答案

您可以在 JOI 架构中使用 otherwise 键。

声明 exports.schema 之前代码中的某处:

const trialIdRequired = Joi.object({
subscriptionId: Joi.number().integer().min(1).max(2147483647).required(),
subscriptionTrialId: Joi.required()
}).required()

const trialIdNotRequired = Joi.object({
subscriptionId: Joi.number().integer().min(1).max(2147483647).required(),
subscriptionTrialId: Joi.any()
})

然后在data字段中添加一个when子句

data: Joi.when(
'metadata.type',
{
is: 'setup',
then: trialIdRequired,
otherwise: trialIdNotRequired
})

关于javascript - 使用 Joi 库进行复杂验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55342432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com