node.js - 创建一个 post 表,将 userID 添加到 post 表中,并将 postID 自动添加到 sequlize 中的 image 表中
问题描述
我想使用 sequelize 使用 nodejs 和 postgresql 创建一个帖子创建功能。模型包括用户表、帖子表和图像。我不知道如何为表创建外键链接,所以当用户登录并创建帖子时,它会将用户 ID 添加到帖子表以及将帖子 ID 添加到图像表中,谁能帮助我我可以绘制架构?以及如何创建帖子?
// 移民
// user
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING,
allowNull: false
},
lastName: {
type: Sequelize.STRING,
allowNull: false
},
username: {
type: Sequelize.STRING,
allowNull: false
},
password: {
type: Sequelize.STRING,
allowNull: false
},
email: {
type: Sequelize.STRING
},
phone: {
type: Sequelize.STRING
},
gender: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Users');
}
};
// post
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Posts', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
userID: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'Users',
key: 'id'
}
},
description: {
type: Sequelize.TEXT
},
like: {
type: Sequelize.INTEGER,
defaultValue: 0
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Posts');
}
};
// image
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Images', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
postID: {
type: Sequelize.INTEGER,
allowNull: false,
references: {
model: 'Posts',
key: 'id'
}
},
urlImage: {
type: Sequelize.STRING,
allowNull: false
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Images');
}
};
// 楷模
// user
use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
username: DataTypes.STRING,
password: DataTypes.STRING,
email: DataTypes.STRING,
phone: DataTypes.STRING,
gender: DataTypes.STRING
}, {});
User.associate = function(models) {
User.hasMany(models.Post, {refeignKey: 'userID'})
User.hasMany(models.Comment, {refeignKey: 'userID'})
User.hasMany(models.Follow, {refeignKey: 'userID'})
User.hasMany(models.Follow, {refeignKey: 'userID_follow'})
};
return User;
};
//post
'use strict';
module.exports = (sequelize, DataTypes) => {
const Post = sequelize.define('Post', {
description: DataTypes.STRING,
like: DataTypes.INTEGER
}, {});
Post.associate = function(models) {
Post.belongsTo(models.User, {refeignKey: 'userID'})
Post.hasOne(models.Image, {refeignKey: 'postID'})
Post.hasOne(models.Comment, {refeignKey: 'postID'})
};
return Post;
};
//image
'use strict';
module.exports = (sequelize, DataTypes) => {
const Image = sequelize.define('Image', {
urlImage: DataTypes.STRING
}, {});
Image.associate = function(models) {
Image.belongsTo(models.Post, {refeignKey: 'postID'})
};
return Image;
};
// 路由器
const result = await Post.create({
description: postInfo.description,
Image: {
urlImage: postInfo.urlImage
}
},{
include: Image
})
错误:列 \"userID\" 中的空值违反非空约束
解决方案
推荐阅读
- python - 通过 Python 发送带有隐藏/不同发件人姓名的 Outlook 电子邮件?
- r - 在 R 中显示相关表闪亮
- trusted-web-activity - TWA URL 栏未隐藏
- tcl - 为什么 lsort 从列表元素中删除 '\'?
- apache-spark - Pyspark:如何从 Spark 数据框中过滤 10000 个随机元素
- excel - 使用 XMLHTTP 而不是试用 Internet Explorer
- flutter - 如何在不用户单击按钮的情况下执行 RaisedButton 属性“onPressed”。onPressed 具有异步功能
- c++ - 如何在模板中解释默认参数值 T()?
- transactions - WildFly 如何处理@TransactionTimeout?
- python - Pandas 中的面板