我正在使用Sequelize 4.38.0
,并在用户模型上对电子邮件进行了自定义验证。
自定义验证的构造方式(请参见下文),如果email属性未更改,则需要跳过验证。否则,它将停止整个更新操作(因为它认为电子邮件地址已被占用)。
如何仅在值更改时才对属性进行验证?
email: {
type: DataTypes.STRING,
allowNull: false,
validate: {
isEmail: {
msg: 'Wrong email format',
},
notEmpty: {
msg: 'Email has to be present',
},
isUnique: function(value, next) {
User.find({
where: {
email: value,
organizationId: this.organizationId,
},
})
.then(function(result) {
if (result === null) {
return next()
} else {
return next(' Email address already in use')
}
})
.catch(err => {
return next()
})
},
},
},
答案 0 :(得分:0)
使用如下条件解决它:
isUnique: function(value, next) {
if (this.changed('email')) {
User.find({
where: {
email: value,
organizationId: this.organizationId,
},
})
.then(function(result) {
if (result === null) {
return next()
} else {
return next(' Email address already in use')
}
})
.catch(err => {
return next()
})
} else {
next()
}
},