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)