Sequelize defaultValue 未设置
Sequelize defaultValue not getting set
这是我的食谱模型 table。我使用 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
}
});
};
这可能发生在两种情况下。首先,如果您在定义模型后输入了 defaultValue
和 allowNull
,那么您需要将 table 与 sync({force: true)
.
重新同步
其次,如果 title
和 prep_time 等属性未提供给 create()
,AllowNull
和 defaultValue
将起作用。例如 create({title:'',prep_time:''})
将填充空值。但是,如果您执行 create({title:''}
,则 prep_time
的值将设置为 defaultValue
。类似地跳过 title
属性将导致验证错误。
但是如果你正在做 create(req.body)
并且 body 有字段 title
和 prep_time
。然后将输入空值。
希望我说清楚了:)
我知道这个问题是几年前的事了。但是,这可能对其他人有帮助。在这种情况下,它应该使用 Sequelize 的 validate notEmpty。因为HTML表单默认传入not null(空字符串或''或""或``),所以不需要使用validate notNull.
在这里,我推荐大家阅读这篇文章:
https://sequelize.org/master/manual/validations-and-constraints.html
Sequelize会按顺序检查:
- 自定义验证
- 内置验证
- 约束
这是我的食谱模型 table。我使用 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
}
});
};
这可能发生在两种情况下。首先,如果您在定义模型后输入了 defaultValue
和 allowNull
,那么您需要将 table 与 sync({force: true)
.
其次,如果 title
和 prep_time 等属性未提供给 create()
,AllowNull
和 defaultValue
将起作用。例如 create({title:'',prep_time:''})
将填充空值。但是,如果您执行 create({title:''}
,则 prep_time
的值将设置为 defaultValue
。类似地跳过 title
属性将导致验证错误。
但是如果你正在做 create(req.body)
并且 body 有字段 title
和 prep_time
。然后将输入空值。
希望我说清楚了:)
我知道这个问题是几年前的事了。但是,这可能对其他人有帮助。在这种情况下,它应该使用 Sequelize 的 validate notEmpty。因为HTML表单默认传入not null(空字符串或''或""或``),所以不需要使用validate notNull.
在这里,我推荐大家阅读这篇文章: https://sequelize.org/master/manual/validations-and-constraints.html
Sequelize会按顺序检查:
- 自定义验证
- 内置验证
- 约束