Node.js 在尝试使用POST方法时,如何修复此Sequelize数据库错误?

Node.js 在尝试使用POST方法时,如何修复此Sequelize数据库错误?,node.js,reactjs,express,sequelize.js,Node.js,Reactjs,Express,Sequelize.js,我正在使用Postman使用Sequelize、node和express测试React应用程序的发布路由。我在下面得到了这个错误 { "name": "SequelizeDatabaseError", "parent": { "code": "ER_NO_DEFAULT_FOR_FIELD", "errno": 1364, "sqlState": "HY000", "sqlMessage": "Field 'titl

我正在使用Postman使用Sequelize、node和express测试React应用程序的发布路由。我在下面得到了这个错误

{
    "name": "SequelizeDatabaseError",
    "parent": {
        "code": "ER_NO_DEFAULT_FOR_FIELD",
        "errno": 1364,
        "sqlState": "HY000",
        "sqlMessage": "Field 'title' doesn't have a default value",
        "sql": "INSERT INTO `Trips` (`id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?);",
        "parameters": [
            "2019-12-01 00:50:42",
            "2019-12-01 00:50:42"
        ]
    },
    "original": {
        "code": "ER_NO_DEFAULT_FOR_FIELD",
        "errno": 1364,
        "sqlState": "HY000",
        "sqlMessage": "Field 'title' doesn't have a default value",
        "sql": "INSERT INTO `Trips` (`id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?);",
        "parameters": [
            "2019-12-01 00:50:42",
            "2019-12-01 00:50:42"
        ]
    },
    "sql": "INSERT INTO `Trips` (`id`,`createdAt`,`updatedAt`) VALUES (DEFAULT,?,?);",
    "parameters": [
        "2019-12-01 00:50:42",
        "2019-12-01 00:50:42"
    ]
}
我的表的模式如下

CREATE TABLE Trips (
  id INT NOT NULL AUTO_INCREMENT,
  title varchar(255) NOT NULL,
  location varchar(255) DEFAULT NULL,
  Description varchar(255) DEFAULT NULL,
  tripDate datetime DEFAULT NULL,
  image varchar(255) DEFAULT NULL,
  createdAt timestamp default current_timestamp,
  updatedAt timestamp,
  PRIMARY KEY (id)
);
我尝试将各个列更改为默认NULL,但即使在将数据输入到这些字段时,数据库中也会返回NULL。我添加了代码的图像

反应形式

跳闸控制器

Trips模型

Trips路由器


-Sam

1。默认情况下,它将在模型架构中查找createdAt和updatedAt。 因此,要么添加createdAt,updatedAt,要么如果不需要这两个字段,则在模型模式中设置timestamps:false

2.您应该在模型架构中添加id字段,因为sequelize始终需要在模型架构中使用主键的id字段。这在每个模型中都是必需的

 const Trips = sequelize.define('Trips',{
id: {
    allowNull: false,
    autoIncrement: true,
    primaryKey: true,
    type: Sequelize.INTEGER
  },
  title:DataTypes.STRING,
  location:DataTypes.STRING,
  Description:DataTypes.STRING,
  tripDate:DataTypes.DATEONLY,
  image:DataTypes.STRING
  },
 {timestamps:false});
您有两个问题:

1) 在SQL声明和模型声明中,缺少
title
列的默认值

您的SQL表声明应如下所示:

CREATE TABLE Trips (
  id INT NOT NULL AUTO_INCREMENT,
  title varchar(255) DEFAULT NULL, -- Or any other default value
  location varchar(255) DEFAULT NULL,
  Description varchar(255) DEFAULT NULL,
  tripDate datetime DEFAULT NULL,
  image varchar(255) DEFAULT NULL,
  createdAt timestamp default current_timestamp,
  updatedAt timestamp,
  PRIMARY KEY (id)
);
根据此声明,您的模型声明应为:

const Trips = sequelize.define('Trips', {
    title: { 
             type: DataTypes.STRING,
             defaultValue: null // or whatever you would like
    },
    location:DataTypes.STRING,
    Description:DataTypes.STRING,
    tripDate:DataTypes.DATEONLY,
    image:DataTypes.STRING
  },
如果在修改这两个错误后仍然出现此错误,则问题出在客户端上 另一方面,由于某些原因,标题数据不会传递到服务器,因此
在req.body未定义

我想说它与错误消息“Field'title'没有默认值”有关-我可以从insert语句中看出,您没有为
title
字段提供值,从模式中可以看出它没有默认值,并且
不为NULL
。您需要给它一个默认值,使其为null,或者提供它。如果您认为您正在为
title
列提供一个值,那么您需要显示相关的代码。因此,我尝试在Postman中以一个值提供它。因此,我猜我的代码设置错误,无法从特定字段中获取值?我不知道express是否足够聪明来处理它,但您的代码中没有有效的JSON。必须使用双引号,而不是单引号。“GraphQL”旁边显示“text”的下拉列表可以更改为“JSON(application/JSON)”,它应该突出显示JSON的任何问题。