【问题标题】:how i can fix the SequelizeDatabaseError: Field 'id' doesn't have a default value?我如何修复 SequelizeDatabaseError:字段 'id' 没有默认值?
【发布时间】:2019-11-08 16:52:12
【问题描述】:

我正在使用 MVC 节点处理节点中的待办事项列表,将 pug 和续集作为 ORM 和视图部分我用 pug 制作,所以当我启动我的应用程序时工作正常,但是当我尝试创建一个新项目时proyect它已经插入数据库中,出现错误1364

原则上这是一个添加到我的作品集的个人项目,我看到通过停用 STRICT SQL 模式有一个可能的解决方案,但我想知道是否有其他解决方案

model code Proyect.js

const Sequelize = require('sequelize');
//conect db
const db = require('../config/db');

const Proyects = db.define('proyects', {
    id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true,
        allowNull: false
       },
    name: Sequelize.STRING,
    url: Sequelize.STRING
     });
module.exports = Proyects;

我希望使用此模型在我的表中创建一个寄存器,但当我尝试实际错误时,下一个

Executing (default): CREATE TABLE IF NOT EXISTS `proyects` (`id` INTEGER NOT NULL auto_increment , `name` VARCHAR(255), `url` VARCHAR(255), `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `proyects`
conected to db
Executing (default): INSERT INTO `proyects` (`id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?);
{ SequelizeDatabaseError: Field 'id' doesn't have a default value
  code: 'ER_NO_DEFAULT_FOR_FIELD',
     errno: 1364,
     sqlState: 'HY000',
     sqlMessage: 'Field \'id\' doesn\'t have a default value',
     sql:
      'INSERT INTO `proyects` (`id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?);' },

【问题讨论】:

  • 欢迎来到 Stack Overflow。如果您的问题有有效的答案,请将其标记为有效答案。

标签: mysql node.js express model-view-controller sequelize.js


【解决方案1】:

我最初收到此错误是因为我拼错了 autoIncrement。为了解决这个问题,我在应用正确的拼写后使用了 {force:true} ,一旦问题消失,就将其从 sync() 方法中删除。 我永远不会在我的生产部署中使用 {force:true},因为它会删除表(并删除您的所有记录)。

在app.js中,调用sync方法如下

sequelize.sync({force:true})
    .then(result => {
        //console.log(result);
        app.listen(3000);
    })
    .catch(err => {
        console.log(err);
    });

【讨论】:

    【解决方案2】:

    据我了解,这是 mysql 数据库的问题。表中的“id”字段被标记为非空,并且在插入值时,您没有为“id”字段提供任何值。

    您可以避免在创建表时在“id”字段中允许空值或提供默认值(您可以使用 defaultValue 标志)来避免遇到此错误。否则,您已经有了替代解决方案。

    【讨论】:

      猜你喜欢
      • 2014-11-09
      • 2015-07-19
      • 2020-01-02
      • 2018-07-31
      • 2010-10-22
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      相关资源
      最近更新 更多