You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:55:26