Sequelize defaultValue未设置

时间:2016-03-23 20:19:54

标签: mysql node.js sequelize.js

这是我的食谱表模型。我使用mysql作为数据库,以及sequelize模块。如果我在表单中将标题,prep_time或cook_time留空,则似乎跳过了allowNull和defaultValue的验证并尝试输入'' (空白字符串)进入数据库。有什么我做错了吗?

module.exports = function(sequelize, DataTypes) {
    return sequelize.define('recipe', {
        title: {
            type: DataTypes.STRING,
            allowNull: false
        },
        description: {
            type: DataTypes.TEXT
        },
        ingredients: {
            type: DataTypes.TEXT
        },
        instructions: {
            type: DataTypes.TEXT
        },
        yield: {
            type: DataTypes.STRING
        },
        prep_time: {
            type: DataTypes.INTEGER,
            allowNull: false,
            defaultValue: '0'
        },
        cook_time: {
            type: DataTypes.INTEGER,
            allowNull: false,
            defaultValue: '0'
        },
        image: {
            type: DataTypes.STRING
        }
    });
};

2 个答案:

答案 0 :(得分:7)

有两种情况可能发生。首先,如果您在定义模型后稍后进入defaultValueallowNull,则需要使用sync({force:true)重新同步该表。

其次,如果AllowNull和prep_time等属性未提供给defaultVaue,则titlecreate()将有效。例如create({title:'',prep_time:''})将填充空值。但如果您执行create({title:''},则prep_time的值设置为defaultValue。类似的跳过title属性会导致验证错误。

但是如果您正在执行create(req.body)并且正文包含字段titleprep_time。然后输入空值。

希望我明确表示:)

答案 1 :(得分:0)

我知道这个问题是几年前的事了。但是,这可能对其他人有帮助。在这种情况下,它应该通过 Sequelize 使用 validate notEmpty。因为HTML表单默认传入的是not null(空字符串或者''或者“”或者``),所以不需要使用validate notNull。

在这里,我建议人们阅读以下内容: https://sequelize.org/master/manual/validations-and-constraints.html

Sequelize 将按顺序检查:

  1. 自定义验证
  2. 内置验证
  3. 约束