javascript - Sequelize n :m association - Voting system - cannot set attribute of join table

标签 javascript node.js sqlite express sequelize.js

我正在尝试实现一个投票系统,以便我的应用程序的用户可以对其他用户对问题的回答进行投票。

它是一个在后端使用 Express 和 Sequelize 的 Node 应用程序,目前我正在使用 SQLite 数据库以方便测试。

这是我的模型的相关部分:

// in user.js
User.associate = function (models) {
  // ...
  models.User.belongsToMany(models.Response, {
    through: models.Vote,
    as: 'Votes'
  })
}

// in response.js
Response.associate = function (models) {
  // ...
  models.Response.belongsToMany(models.User, {
    through: models.Vote,
    as: 'Votes'
  })
}

// in vote.js
module.exports = (sequelize, DataTypes) => {
  return sequelize.define('Vote', {
    upVote: {
      type: DataTypes.BOOLEAN,
      allowNull: false
    }
  })
}

所以现在在我的 votes.js Controller 文件中,我可以尝试创建一个新的投票,给定一个 UserId 和一个 ResponseId 如下:
const user = await User.findById(req.user.id)
const response = await Response.findById(req.params.responseId)

await response.addVote(user, {
  upVote: true
})

res.send(await response.getVotes())

问题是,尽管 Votes 连接表已正确创建,并且虽然我向 addVote 函数传递了一个直接指示 upVote 属性应存储什么值的 bool 值,但我还是收到了一个错误,指出 notNull Violation: Vote.upVote cannot be null

我开始添加非空约束的唯一原因是因为没有它,我刚刚收到了 upVote 值为空的投票。

有谁知道为什么会发生这种情况?

最佳答案

我不知道确切的原因,但将 response.addVote 替换为:

const vote = await Vote.create({
  upVote: req.body.upVote,
  UserId: req.user.id,
  ResponseId: req.params.responseId
})

res.send(vote)

工作良好。奇怪的。我不断遇到问题,即 Sequelize 应该为关系提供的所谓“神奇”自动生成函数不可用或不起作用。

关于javascript - Sequelize n :m association - Voting system - cannot set attribute of join table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49920762/

相关文章:

javascript - 为什么 JSHint 在此行抛出 "possible strict violation"

sqlite - 如何从 ORMLite 的 sqlite 数据库生成 java 类代码

Visual Studio 2017 中缺少 SQLite 数据提供程序

javascript - 带有 getElementsByTagName 的二维数组?

javascript - 框架和 iframe 是否有独立的 javascript 上下文?

javascript - 如果元素已经存在于容器中,我们如何使元素可拖放?

node.js - Electron:包含 Webpack 的二进制依赖项

node.js - npm Firebase-Admin 在 AWS EC2 上的 messages.send() 上返回 502

javascript - 如何在 Node 中将 Hex 转换为 Uint8Array?

c - 如何使用 SQLite 从内存中打开数据库?