已提供必填值但Mongoose未识别,如何修复验证错误?
解决Mongoose ValidatorError: Path properties.chargeBoxIdentity is required的问题
嘿,我一眼就看出问题所在啦——你在创建Heartbeat实例的时候,把chargeBoxIdentity直接放在了根对象里,但你的Schema里这个字段是嵌套在properties对象下面的!
问题根源
你的Schema定义明确了chargeBoxIdentity是properties的子字段:
const HeartbeatSchema = mongoose.Schema({ properties: { time : { type : Date, default: Date.now }, chargeBoxIdentity : { type: Number, required: true} }, additionalProperties: false })
但你创建实例的时候却是这么写的:
const HB = new HeartbeatModel({ chargeBoxIdentity: 12345 });
这就导致Mongoose找不到properties.chargeBoxIdentity这个必填字段,自然抛出验证错误了。
修复方法
你需要把chargeBoxIdentity放在properties对象里,和Schema的结构完全对应上:
const HB = new HeartbeatModel({ properties: { chargeBoxIdentity: 12345 } }); HB.save() .then(result => {console.log(result)}) .catch(err => console.log(err));
这样Mongoose就能正确识别到必填字段,验证通过后就能正常保存文档了。
另外,如果你希望简化代码、有时候可以省略properties的包裹,也可以考虑调整Schema结构,把chargeBoxIdentity提到根层级,但这得看你的业务需求是否允许。不过从你当前的Schema设计来看,保持结构一致才是最直接的解决方案。
内容的提问来源于stack exchange,提问作者Henry Griffiths
相关产品推荐
相关产品推荐

