我有这个json:
let purchaseSubscription = {
'metadata': {
'eventName': 'PurchaseSubscription',
'type': 'setup' // setup, repurchase or recurring
},
'data': {
'subscriptionId': '447481',
'subscriptionTrialId': '23542'
}
};
如果元数据。类型的值为设置 然后应验证 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 });
但是我没有得到期望的结果。不管我在 metadata.type
下有什么内容, data.subscriptionTrialId 总是经过验证。我尝试阅读documentation,但无法使其起作用:(
答案 0 :(得分:1)
您可以在JOI模式中使用arr[5]>arr[7]
键。
在声明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()
})
字段中添加when
子句
data