代码之家  ›  专栏  ›  技术社区  ›  made_in_india

Joi替代方案未按要求工作,以验证请求

  •  0
  • made_in_india  · 技术社区  · 7 年前

    Joi 用于验证请求。 这里是我的代码,我希望请求会出错,如下所示 fooReq 如果需要,则 invoice_number ,但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));
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   made_in_india    7 年前

    简单解决方案使用 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)
    
    推荐文章