指定字段名称而不是“值”

Que*_*n3r 5 joi

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

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;
}
Run Code Online (Sandbox Code Playgroud)

该代码将引发错误并显示以下错误消息

ValidationError:“值”必须是 [foo,bar] 之一

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

ValidationError:“环境”必须是[开发、生产、测试​​]之一

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

Chr*_*ras 2

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

任何.标签(名称)

覆盖错误消息中的键名称。

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

您可以简单地执行以下操作:

const schema = {
    first_name: Joi.string().label('First Name')
};
Run Code Online (Sandbox Code Playgroud)

将输出:

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;
}
Run Code Online (Sandbox Code Playgroud)