Sequelize:创建 post 并将其与当前用户关联时出错
Sequelize: Error creating a post and associating it with the current user
我在创建 post 并尝试将其与当前用户相关联时遇到错误:
SequelizeDatabaseError: Field 'userId' doesn't have a default value
这是我的方法
exports.createPost = async (req, res) => {
const {title, content, userEmail} = req.body;
const user = await User.findOne({
where: {
email: userEmail
}
})
if (user) {
const post = await Post.create({
title, content, image: req.file.originalname, userId: user.id
})
res.json(post)
}
}
也尝试过 user: user
。
这是我的用户模型
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
username: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING
}, {});
User.associate = function(models) {
User.hasMany(models.Post)
};
return User;
};
这是 post 模型,其中声明了 belongsTo 关系
'use strict';
module.exports = (sequelize, DataTypes) => {
const Post = sequelize.define('Post', {
title: DataTypes.STRING,
content: DataTypes.STRING,
image: DataTypes.STRING
}, {});
Post.associate = function(models) {
Post.belongsTo(models.User, {
onDelete: 'CASCADE'
})
};
return Post;
};
您没有以正确的方式定义关联。你可以这样做。
用户模型
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: {
type: DataTypes.INT,
autoIncrement: true,
primaryKey: true,
},
username: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING
}, {});
User.associate = function (models) {
User.hasMany(models.Post, {
foreignKey: 'userId',
onDelete: 'CASCADE'
})
};
return User;
};
Post 型号
'use strict';
module.exports = (sequelize, DataTypes) => {
const Post = sequelize.define('Post', {
id: {
type: DataTypes.INT,
autoIncrement: true,
primaryKey: true,
},
userId: DataTypes.INT,
title: DataTypes.STRING,
content: DataTypes.STRING,
image: DataTypes.STRING
}, {});
Post.associate = function (models) {
Post.belongsTo(models.User, {
foreignKey: 'userId',
onDelete: 'CASCADE'
})
};
return Post;
};
查询像:
const { title, content, userEmail } = req.body;
const user = await User.findOne({
where: {
email: userEmail
},
raw: true
})
if (user) {
const post = await Post.create({
title, content, image: req.file.originalname, userId: user.id
})
res.json(post)
}
我在创建 post 并尝试将其与当前用户相关联时遇到错误:
SequelizeDatabaseError: Field 'userId' doesn't have a default value
这是我的方法
exports.createPost = async (req, res) => {
const {title, content, userEmail} = req.body;
const user = await User.findOne({
where: {
email: userEmail
}
})
if (user) {
const post = await Post.create({
title, content, image: req.file.originalname, userId: user.id
})
res.json(post)
}
}
也尝试过 user: user
。
这是我的用户模型
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
username: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING
}, {});
User.associate = function(models) {
User.hasMany(models.Post)
};
return User;
};
这是 post 模型,其中声明了 belongsTo 关系
'use strict';
module.exports = (sequelize, DataTypes) => {
const Post = sequelize.define('Post', {
title: DataTypes.STRING,
content: DataTypes.STRING,
image: DataTypes.STRING
}, {});
Post.associate = function(models) {
Post.belongsTo(models.User, {
onDelete: 'CASCADE'
})
};
return Post;
};
您没有以正确的方式定义关联。你可以这样做。
用户模型
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
id: {
type: DataTypes.INT,
autoIncrement: true,
primaryKey: true,
},
username: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING
}, {});
User.associate = function (models) {
User.hasMany(models.Post, {
foreignKey: 'userId',
onDelete: 'CASCADE'
})
};
return User;
};
Post 型号
'use strict';
module.exports = (sequelize, DataTypes) => {
const Post = sequelize.define('Post', {
id: {
type: DataTypes.INT,
autoIncrement: true,
primaryKey: true,
},
userId: DataTypes.INT,
title: DataTypes.STRING,
content: DataTypes.STRING,
image: DataTypes.STRING
}, {});
Post.associate = function (models) {
Post.belongsTo(models.User, {
foreignKey: 'userId',
onDelete: 'CASCADE'
})
};
return Post;
};
查询像:
const { title, content, userEmail } = req.body;
const user = await User.findOne({
where: {
email: userEmail
},
raw: true
})
if (user) {
const post = await Post.create({
title, content, image: req.file.originalname, userId: user.id
})
res.json(post)
}