
[英]How do i fix inserting to database with Sequelize Node Express Mysql?
[英]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.