这是我的食谱表模型。我使用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
}
});
};
答案 0 :(得分:7)
有两种情况可能发生。首先,如果您在定义模型后稍后进入defaultValue
和allowNull
,则需要使用sync({force:true)
重新同步该表。
其次,如果AllowNull
和prep_time等属性未提供给defaultVaue
,则title
和create()
将有效。例如create({title:'',prep_time:''})
将填充空值。但如果您执行create({title:''}
,则prep_time
的值设置为defaultValue
。类似的跳过title
属性会导致验证错误。
但是如果您正在执行create(req.body)
并且正文包含字段title
和prep_time
。然后输入空值。
希望我明确表示:)
答案 1 :(得分:0)
我知道这个问题是几年前的事了。但是,这可能对其他人有帮助。在这种情况下,它应该通过 Sequelize 使用 validate notEmpty。因为HTML表单默认传入的是not null(空字符串或者''或者“”或者``),所以不需要使用validate notNull。
在这里,我建议人们阅读以下内容: https://sequelize.org/master/manual/validations-and-constraints.html
Sequelize 将按顺序检查: