【问题标题】:Joi alternatives not working as per required for validation of requestJoi 替代方案无法按照验证请求的要求工作
【发布时间】:2018-09-26 00:51:56
【问题描述】:

我正在使用 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));

【问题讨论】:

    标签: node.js joi


    【解决方案1】:

    使用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)
    

    【讨论】:

      猜你喜欢
      • 2019-09-08
      • 2019-02-25
      • 2016-08-23
      • 2019-11-01
      • 2019-08-11
      • 2012-12-28
      • 2020-08-12
      • 2016-09-06
      • 2015-08-21
      相关资源
      最近更新 更多