【问题标题】:specify field name instead of "value"指定字段名称而不是“值”
【发布时间】:2020-07-24 22:28:19
【问题描述】:

我必须逐个验证值,而不是为多个值传递整个架构。基于此处的单值验证文档

https://hapi.dev/module/joi/

还有这个示例代码

const validator: AnySchema = Joi.string().valid('foo', 'bar').required();
const validationResult: ValidationResult = validator.validate('invalid');
const validationError: ValidationError = validationResult.error;

if (validationError) {
    throw validationError;
}

代码将抛出错误并显示以下错误消息

ValidationError: "value" 必须是 [foo, bar] 之一

有没有一种简单的方法可以将"value" 替换为特定名称?因此,当我想验证 environment 时,错误消息可能是

ValidationError: "environment" 必须是 [development, production, 测试]

或者只有在一次验证多个值时才有可能?

【问题讨论】:

    标签: joi


    【解决方案1】:

    您可以使用any.label(name) 方法并设置自定义标签,该标签也将显示在错误消息中:

    any.label(name)

    覆盖错误消息中的键名。

    • name - 密钥的名称。
    const schema = {
        first_name: Joi.string().label('First Name')
    };
    

    你可以这样做:

    const validator: AnySchema = Joi
      .string()
      .label('Foo/Bar') // Change tha label using label method
      .valid('foo', 'bar')
      .required();
    
    const validationResult: ValidationResult = validator.validate('invalid');
    const validationError: ValidationError = validationResult.error;
    
    if (validationError) {
        throw validationError;
    }
    

    将输出:

    ValidationError: "Foo/Bar" must be one of [foo, bar]
    

    【讨论】:

    • 非常感谢您的帮助 :) 不幸的是,我可以在 14 小时内给您赏金..
    • @Question3r 不客气。不要担心赏金,它会在到期时重新获得接受的答案,所以即使你忘记它也没关系;-)
    猜你喜欢
    • 1970-01-01
    • 2013-12-10
    • 2013-04-17
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多