Joi 替代方案无法按照验证请求的要求工作
Joi alternatives not working as per required for validation of request
我正在使用 npm 模块 Joi
来验证请求。
这是我的代码,我预计请求会出错,因为如果 invoice_number
,则需要 fooReq
,但 Joi 没有返回任何错误。
let fooReq = Joi.object({
city: Joi.string().required(),
zip: Joi.string().required(),
}).required();
let fooOpt = Joi.object({
city: Joi.string(),
state: Joi.string(),
}).optional();
let barSch = {
invoice_number: Joi.string(),
shipping: Joi.alternatives()
.when('invoice_number',
{
is: Joi.string(),
then: fooReq,
otherwise: fooOpt
}
)
};
let request = {
invoice_number: "123"
};
console.log(Joi.validate(request, barSch));
使用 when
的简单解决方案,来自 github。
const Joi = require('joi');
const foo = Joi.object({
city: Joi.string().required(),
zip: Joi.string().required(),
});
const deliverySchema = Joi.object({
invoice_number: Joi.string(),
shipping: foo
.when('invoice_number', {
is: Joi.string().required(),
then: Joi.required()
})
});
console.log(deliverySchema.validate({ invoice_number: "123346575867879878" }).error)
console.log(deliverySchema.validate({}).error)
console.log(deliverySchema.validate({ shipping: 'foo' }).error)
我正在使用 npm 模块 Joi
来验证请求。
这是我的代码,我预计请求会出错,因为如果 invoice_number
,则需要 fooReq
,但 Joi 没有返回任何错误。
let fooReq = Joi.object({
city: Joi.string().required(),
zip: Joi.string().required(),
}).required();
let fooOpt = Joi.object({
city: Joi.string(),
state: Joi.string(),
}).optional();
let barSch = {
invoice_number: Joi.string(),
shipping: Joi.alternatives()
.when('invoice_number',
{
is: Joi.string(),
then: fooReq,
otherwise: fooOpt
}
)
};
let request = {
invoice_number: "123"
};
console.log(Joi.validate(request, barSch));
使用 when
的简单解决方案,来自 github。
const Joi = require('joi');
const foo = Joi.object({
city: Joi.string().required(),
zip: Joi.string().required(),
});
const deliverySchema = Joi.object({
invoice_number: Joi.string(),
shipping: foo
.when('invoice_number', {
is: Joi.string().required(),
then: Joi.required()
})
});
console.log(deliverySchema.validate({ invoice_number: "123346575867879878" }).error)
console.log(deliverySchema.validate({}).error)
console.log(deliverySchema.validate({ shipping: 'foo' }).error)