仅在价值变化时验证

时间:2018-11-13 14:40:37

标签: node.js validation sequelize.js

我正在使用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()
        })
    },
  },
},

1 个答案:

答案 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()
  }
},