如何在Objection.js中仅在插入时验证输入,更新时不验证?
实现Objection.js仅插入时触发验证,更新时跳过验证
你可以通过重写模型的$validate方法,结合Objection.js内置的$isInsert属性来实现这个需求。具体做法如下:
在你的CustomerModel类中添加以下方法:
async $validate(opt) { // 仅在插入操作时执行默认的JSON Schema验证 if (this.$isInsert) { return super.$validate(opt); } // 更新操作直接跳过验证,返回resolved状态的Promise return Promise.resolve(); }
原理说明
$isInsert是Objection.js模型实例的内置属性,当执行插入操作(比如CustomerModel.query().insert(data))时,该属性为true;执行更新操作(比如CustomerModel.query().updateAndFetchById(id, data))时,该属性为false。- 重写
$validate方法后,只有插入时会调用父类的默认验证逻辑(即基于jsonSchema的验证),更新操作会直接跳过验证流程。
补充说明
如果你的BaseModel中也自定义了$validate逻辑,确保super.$validate(opt)调用的是正确的父类验证方法,避免覆盖掉基类的自定义验证逻辑(如果有的话)。
内容的提问来源于stack exchange,提问作者Gpak
相关产品推荐
相关产品推荐

