Node.js中使用Ajv,如何指定Schema里max必须大于min?
如何在Ajv中验证
max始终大于min 针对你给出的Schema,要添加max必须严格大于min的验证规则,有两种实用方法:
方法一:使用Ajv的$data关键字
Ajv内置的$data关键字支持引用同一对象内的其他字段值,能直接实现max的最小值依赖min的要求(且是排他性大于)。
修改后的Schema:
field_name: { type: "object", properties: { min: { type: "number", minimum: 0, maximum: 600 }, max: { type: "number", minimum: 0, maximum: 600, exclusiveMinimum: { $data: "1/min" } // 表示max必须严格大于min的值 }, }, required: ["min", "max"], additionalProperties: false, },
注意事项:
初始化Ajv实例时必须启用$data选项,否则该关键字不生效:
const Ajv = require('ajv'); const ajv = new Ajv({ $data: true });
方法二:自定义验证关键字
如果不想依赖$data,可以自定义一个专属的验证关键字,灵活控制验证逻辑。
步骤1:添加自定义关键字到Ajv实例
const Ajv = require('ajv'); const ajv = new Ajv(); // 添加自定义验证关键字 ajv.addKeyword('maxGreaterThanMin', { validate: (schema, data) => { // data是当前被验证的field_name对象 return data.max > data.min; }, // 可选:自定义错误信息 errors: true, message: 'max必须大于min' });
步骤2:在Schema中启用该关键字
field_name: { type: "object", properties: { min: { type: "number", minimum: 0, maximum: 600 }, max: { type: "number", minimum: 0, maximum: 600 }, }, required: ["min", "max"], additionalProperties: false, maxGreaterThanMin: true // 启用自定义验证规则 },
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

