node.js - Sequelize 列中的空值违反了非空约束

标签 node.js postgresql sequelize.js

尝试将赞与帖子关联时出现此错误。

Unhandled rejection SequelizeDatabaseError: null value in column "userId" violates not-null constraint



现在下面的代码可以获取 post id 和 user id,我做了一个 console log 。我可能做错了什么?

路线/posts.js
router.post('/:userId/like/:postId', (req, res)=> {
    models.Post.findOne({
      where:{
          id: req.params.postId
      }
    })
    .then( (like) => {
        if(like){
            models.Likes.create({
                where:{
                    userId: req.params.userId,
                    postId: req.params.postId
                },
                like:true

            }).then( (result) => {
                res.status(200).send({
                    message: 'You have like this post',
                    like: result
                })
            })
        }
    }).catch( (err) => {
        res.status(401).send({
            message: "Something went wrong",
            err: err
        })
    })

})

这是 喜欢的迁移
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Likes', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      like: {
        type: Sequelize.BOOLEAN
      },
      userId: {
        allowNull: false,
        type: Sequelize.INTEGER,
        references: {
          model: 'Users',
          key: 'id'
        }
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Likes');
  }
};

帖子迁移
'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Posts', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      title: {
        type: Sequelize.STRING
      },
      post_content: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      userId: {
        type: Sequelize.INTEGER,
        references: {
          model: 'Users',
          key: 'id'
        }
      },
      username: {
        type: Sequelize.STRING
      },
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Posts');
  }
};

喜欢模型
'use strict';
module.exports = function(sequelize, DataTypes) {
  const Like = sequelize.define('Likes', {
    like:{
      type:DataTypes.BOOLEAN,
      allowNull:true
    }
  }, {});
    Like.associate = function(models) {
        Like.belongsTo(models.User, {
          onDelete: "CASCADE",
          sourceKey: 'userId'

        })
        Like.belongsTo(models.Post, {
          onDelete: "CASCADE",
          sourceKey: 'likeId'

        })
    }
  return Like;
}

Post.model
module.exports = (sequelize, DataTypes) => {
  const Post = sequelize.define('Post', {
    title: DataTypes.STRING,
    post_content: DataTypes.STRING,
    username:  DataTypes.STRING
  }, {});
  Post.associate = function(models) {
    Post.belongsTo(models.User, {  foreignKey: 'userId',  targetKey: 'id' });
    Post.hasMany(models.Likes, {  foreignKey: 'postId',  sourceKey: 'id' });
  };
  return Post;
};

额外的

add_postId_to_likes
'use strict';
module.exports = {
  up: function (queryInterface, Sequelize) {
     return queryInterface.addColumn(
      'Likes',
      'postId',
      {
        type: Sequelize.INTEGER,
        allowNull: true,
        references: {
          model: 'Posts',
          key: 'id',

        }
      }
    )
  },

  down: function (queryInterface, Sequelize) {
     return queryInterface.removeColumn(
     'Likes',
     'postId'
   )
  }
};

最佳答案

在解析器中的 create 调用中,您没有为其提供必要的值,您有一个 where 子句,但实际上并未为其提供所需 userId 的值.. 看起来您的模型中唯一的值是您正在设置的 bool 值

关于node.js - Sequelize 列中的空值违反了非空约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55776622/

相关文章:

node.js - 使用docker-compose时如何为mongodb图像添加--auth?

node.js - 在 View 中调用时,如何在 ejs View 中显示来自 ajax 结果集的数据

sql - 如何使用postgres获取日期

sql - 在 Sequelize 中使每个用户 ID 的字段唯一?

javascript - 如何在 JavaScript 中通过 MySQL 建立多对多关系?

node.js - 应该怎么做才能在不使用 sudo 的情况下加入项目的两个模块?

node.js - 如何设置默认页眉和页脚 Nuxt.js?

sql - 检索最佳结果的高效 SQL

postgresql - 使用 sequelize 将 JSON 数据播种到 PostgreSQL 数据库时出错

arrays - 如何在 Postgres 中转换嵌套在另一个数组内的对象内的 JSON 数组?