Express 创建函数中的枚举数据类型存在问题

Express 创建函数中的枚举数据类型存在问题,express,enums,sequelize.js,Express,Enums,Sequelize.js,我已经创建了id为(主键)、标题为、创建时间为、更新时间为、状态为的“blogs”表(枚举类型的值为“active、inactive、hidden”,默认值为“active”) 当从上述一组值和空值中给出状态值时,Blog模型上的create函数工作正常 const Blog = sequelize.define('blog', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, text: Se

我已经创建了id为(主键)、标题为、创建时间为、更新时间为、状态为的“blogs”表(枚举类型的值为“active、inactive、hidden”,默认值为“active”)

当从上述一组值和空值中给出状态值时,Blog模型上的create函数工作正常

const Blog = sequelize.define('blog', { id: { type: 
Sequelize.INTEGER, 
primaryKey: true, autoIncrement: true }, text: Sequelize.STRING, 
status : { type : Sequelize.ENUM, allowNull : false, values : 
['Inactive','Active','Hidden'], defaultValue : 'Active' } }); 
Blog.create({"title" :"hello","status":"abc"}).then(result => {
console.log(result);
});

上面的代码在blogs表中插入了一条状态为空值的新记录。但是结果对象的状态为“abc”。如何获取新插入的记录?

您应该这样定义
ENUM

status : { 
  type : Sequelize.ENUM('Inactive','Active','Hidden'), 
  allowNull : false, 
  defaultValue : 'Active',
  validate: {
    isIn: { 
      args: [['Inactive','Active','Hidden']],
      msg: "Wrong status"
    }
  }
}

为了验证枚举值,您可以使用您应该这样定义
enum

status : { 
  type : Sequelize.ENUM('Inactive','Active','Hidden'), 
  allowNull : false, 
  defaultValue : 'Active',
  validate: {
    isIn: { 
      args: [['Inactive','Active','Hidden']],
      msg: "Wrong status"
    }
  }
}

为了验证枚举值,可以使用

共享模型定义blog=sequelize.define('blog',{id:{type:sequelize.INTEGER,primaryKey:true,autoIncrement:true},text:sequelize.STRING,状态:{type:Sequelize.ENUM,allowNull:false,值:['Inactive','Active','Hidden'],defaultValue:'Active'});请更新问题以保留模型定义作为其一部分。共享模型定义blog=Sequelize.define('blog',{id:{type:Sequelize.INTEGER,primaryKey:true,autoIncrement:true},text:Sequelize.STRING,状态:{type:Sequelize.ENUM,allowNull:false,值:['Inactive','Active','Hidden'],默认值:'Active'});请更新问题以保留模型定义作为其一部分。我不需要验证。创建函数输出对象与数据库插入的记录不同。当我尝试插入状态值为“abc”的新记录时,它以空值插入blogs表中,但输出对象包含“abc”。这不一样,因为数据库不包含“验证"并且不允许插入其他值。默认情况下,
INSERT
query不会返回新插入的记录,因此
Sequelize
也不能将其返回给您。如果您不想验证,但仍然希望能够插入无效数据,则可以实现自定义getter,该getter将剪切除defi之外的所有值ned列表。但我不确定这是否是一种好的做法。我不需要验证。创建函数输出对象与数据库插入的记录不同。当我尝试插入状态值为“abc”的新记录时,它以空值插入到blogs表中,但输出对象包含“abc”。这不一样,因为数据库进行“验证”并且不允许插入其他值。默认情况下,
INSERT
query不会返回新插入的记录,因此
Sequelize
也不能将其返回给您。如果您不想验证,但仍然希望能够插入无效数据,则可以实现自定义getter,该getter将剪切除defi之外的所有值内德的名单。但我不确定这是否是一个好的做法。