我们还可以使用any.when()
来验证那些对象。
我们在Joi.object()
函数参数中传递any.when()
。
const Joi = require('@hapi/joi');
const validationSchema = Joi
.object({
dynamicPrize: Joi
.boolean()
.required(),entryFee: Joi
.number()
.integer()
.min(1)
.required(),isGold: Joi
.boolean()
.required(),})
.when(Joi.object({
dynamicPrize: Joi.boolean().valid(true),entryFee: Joi.number().integer().min(1),isGold: Joi.boolean().valid(false),}),{
then: Joi.any().forbidden()
.error(new Joi.ValidationError('',{
message: 'This should not happen',})),});
const object1 = {
dynamicPrize: true,entryFee: 6,isGold: false,};
const validateObject1 = validationSchema.validate(object1);
console.log('Object1');
if (validateObject1.error) {
console.error(validateObject1.error);
} else {
console.info('validation success');
}
console.log();
const object2 = {
dynamicPrize: false,};
const validateObject2 = validationSchema.validate(object2);
console.log('Object2');
if (validateObject2.error) {
console.error(validateObject2.error);
} else {
console.info('validation success');
}
输出将是这样的。
Object1
{ ValidationError
at Object.<anonymous> (/home/wisnu/Labs/nodejs/joi/index.js:23:14)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
_original: undefined,details: { message: 'This should not happen' } }
Object2
validation success
,
使用valid()
和greater()
var schema = Joi.object({
dynamicPrize: Joi.boolean().valid(true),entryFee: Joi.number().greater(0),isGold: Joi.boolean().valid(false)
});
stackblitz
本文链接:https://www.f2er.com/3168009.html