如何在AJV中使用ajv-errors覆盖maxLength默认错误消息?
覆盖AJV中maxLength关键字的默认错误消息(基于ajv-errors)
你可以通过两种方式直接覆盖AJV内置maxLength关键字的默认错误消息,避免重复编写自定义错误配置:
方法一:通过AJV实例配置指定默认消息
初始化AJV时,在配置的messages字段里直接定义maxLength的自定义消息,记得先挂载ajv-errors插件:
const Ajv = require('ajv'); const ajvErrors = require('ajv-errors'); // 开启allErrors确保能捕获所有验证错误 const ajv = new Ajv({ allErrors: true, messages: { maxLength: 'max_length_of_string_is_255_characters.' } }); ajvErrors(ajv);
方法二:用addKeyword覆盖内置关键字的错误配置
如果需要更灵活的定义,可以用addKeyword方法重写maxLength的错误消息:
const Ajv = require('ajv'); const ajvErrors = require('ajv-errors'); const ajv = new Ajv({ allErrors: true }); ajvErrors(ajv); // 覆盖maxLength的默认错误消息 ajv.addKeyword('maxLength', { error: { message: 'max_length_of_string_is_255_characters.' } });
动态使用maxLength的限制值
如果不想写死255,而是根据schema里设置的maxLength数值动态生成消息,可以用模板变量{limit}:
// 方法一的动态写法 const ajv = new Ajv({ allErrors: true, messages: { maxLength: 'max_length_of_string_is_{limit}_characters.' } }); // 方法二的动态写法 ajv.addKeyword('maxLength', { error: { message: 'max_length_of_string_is_{limit}_characters.' } });
测试验证
编写测试代码验证效果:
// 定义测试schema const testSchema = { type: 'string', maxLength: 255 }; const validate = ajv.compile(testSchema); // 传入超长字符串 const invalidData = 'x'.repeat(256); validate(invalidData); // 打印错误信息 console.log(validate.errors[0].message); // 输出:max_length_of_string_is_255_characters.
内容的提问来源于stack exchange,提问作者linh khánh
相关产品推荐
相关产品推荐

