node.js - Sequelize : Error creating a post and associating it with the current user

标签 node.js sequelize.js associations

我在创建帖子并尝试将其与当前用户关联时出错:

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

后模型
'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)
}

关于node.js - Sequelize : Error creating a post and associating it with the current user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62326011/

相关文章:

postgresql - 在我的情况下,bcrypt && bcryptjs 比较密码总是返回 false

mysql - `Describe table` 出现在每个 Rails 请求中

mysql - Sequelize JS - 如何使用组合键进行多个连接查询?

ruby-on-rails - 通过 ID 数组的关联创建多个 has_many

javascript - 如何通过 REST API 使用feathers.js 读取文件?

node.js - nodejs oracledb 从回调中获取数据

node.js - Nodejs Passport 身份验证回调未被调用且没有错误

ajax - 是否有一个简单的 JS xhr 库(用于 node.js)使用 Q promises 进行获取/发布操作?

javascript - 循环异步操作