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