繁体   English   中英

尝试执行 POST 方法时如何修复此 Sequelize 数据库错误?

[英]How Do I Fix this Sequelize Database Error when trying to do a POST method?

我正在使用 Postman 使用 Sequelize、node 和 express 测试我的 React 应用程序的 POST 路由。 我在下面收到此错误

{
    "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)
);

我尝试将各个列更改为 DEFAULT NULL,但即使我将数据输入到这些字段中,我也会在数据库中返回 null。 我添加了代码的图像。

反应形式反应形式

行程控制器行程控制器

行程模型行程模型

行程路由器行程路由器

-山姆

你有两个问题:

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 未定义

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});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM