【问题标题】:Sequelize defaultValue not getting setSequelize defaultValue 未设置
【发布时间】:2016-07-11 07:42:43
【问题描述】:

这是我的食谱表模型。我使用 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
        }
    });
};

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    这可能在两种情况下发生。首先,如果您在定义模型后输入了defaultValueallowNull,那么您需要将表与sync({force: true) 重新同步。

    其次,如果 title 和 prep_time 等属性未提供给 create()AllowNulldefaultValue 将起作用。例如create({title:'',prep_time:''}) 将填充空值。但如果你这样做create({title:''},那么prep_time 的值将设置为defaultValue。同样跳过title 属性会导致验证错误。

    但是如果你正在做create(req.body) 并且正文有字段titleprep_time。然后将输入空值。

    希望我说清楚了:)

    【讨论】:

    • 就是这样。现在我只需要在提交之前将这些键从对象中提取出来。谢谢。
    【解决方案2】:

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

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

    Sequelize 会有序检查:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2019-02-22
      • 2020-11-14
      • 2019-02-04
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多