ValidationError:“空”列中的“列”不允许为空

时间:2019-02-11 16:33:04

标签: mysql node.js express sequelize.js

当尝试将passwordResetToken设置为null时,我被禁止为空错误。如果我手动对数据库运行查询,那就没问题了。

更新用户的完整代码如下:

let user = await this.usersRepository.getById(userId);
// ...
const userData = {
    encryptedPassword: await bcrypt.hash(
        newPasswd,
        Number(process.env.BCRYPT_ROUNDS)
    ),
    passwordResetToken: null,
    passwordResetExpires: null
};

user = await this.usersRepository.update(user.id, userData);

我有一个这样定义的模型

const User = sequelize.define(
'user',
{
    forename: DataTypes.STRING,
    surname: DataTypes.STRING,
    email: DataTypes.STRING,
    encryptedPassword: DataTypes.STRING,
    passwordResetToken: {
        type: DataTypes.STRING,
        allowNull: true,
        defaultValue: null,
        validate: {
            notEmpty: false
        }
    },
    passwordResetExpires: {
        type: DataTypes.DATE,
        allowNull: true,
        defaultValue: null,
        validate: {
            isDate: true
        }
    }
},
{
    classMethods: {
        associate() {
            // associations can be defined here
        }
    }
}
);

您可以看到allowNull为true,defaultValue为null,而validate: notEmpty设置为false。我想念什么?

使用sequelize v4.42.0

方言'mysql'

1 个答案:

答案 0 :(得分:0)

这实际上是由npm模块structure进行的另一部分验证所导致的。

我必须在这样的架构中将empty设置为true:

  passwordResetToken: {
    type: String,
    required: false,
    empty: true
  },