我尝试使用一些自定义验证逻辑以序列化(例如,具有3个属性attrA,B和C)创建模型。 This tutorial帮助我进行了大部分设置:
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"></script>
但是,在应用程序逻辑中,只需说,需要更新3个属性(A和B)中的2个:
const Model = Sequelize.define('model', {
attrA: { type: Sequelize.STRING },
attrB: { type: Sequelize.STRING },
attrC: { type: Sequelize.STRING },
}, {
validate: {
someValidationLogic() {
// Do something with attrA,B,C
// if (this.attrA ... this.attrB ... this.attrC) throw new Error..
}
}
})
这导致在调用自定义验证逻辑时,在函数中访问的Model.update(
{
attrA: 'foo',
attrB: 'bar'
}, {
where: {
id: 1,
},
returning: true,
})
对象中,this
中仅定义了attrA
和attrB
,并且attrC仍然不确定。这会导致验证逻辑失败,因为无法读取attrC。有什么方法可以使我从this
中看到该对象以填充所有属性?还是该“验证”根本不应该是验证逻辑,应该在应用程序级别完成?
答案 0 :(得分:0)
您的验证逻辑可以考虑未定义attrC
的可能性:
validate: {
someValidationLogic() {
if (this.attrA !== 'undefined' && this.attrA === 'forbidden value' ) {
// throw new Error
}
}
}
但是,如果您的验证包括对照当前数据库值检查提供的值,那么您最好在应用程序层中进行处理:首先恢复当前数据库记录,根据需要进行操作,然后将其保存到数据库中。