在关联的 Sequelize 表上创建新记录需要首字母大写

问题描述 投票:0回答:1

我正在使用 NodeJS、Sequelize (6.35.2) 和 Postgres (8.11.3) 开发一个项目,但我遇到了这种奇怪的行为。但首先,这是模型......

用户.js

const { Model, DataTypes } = require('sequelize')
const { sequelize } = require('../db')

class User extends Model {
  toJSON() {
    return { ...super.toJSON(), password: null, confirmationCode: null } 
  }
}

User.init({
  firstName: {
    type: DataTypes.STRING,
    allowNull: false
  },
  lastName: {
    type: DataTypes.STRING,
    allowNull: false
  },
  email: {
    type: DataTypes.STRING,
    allowNull: false
  },
  password: {
    type: DataTypes.STRING,
    allowNull: false
  },
  confirmationCode: {
    type: DataTypes.STRING,
    allowNull: false
  },
  state: {
    type: DataTypes.STRING,
    defaultValue: 'pending',
    allowNull: false
  }
}, {
  sequelize,
  underscored: false
})

module.exports = {
  User
}

user_reset_token.js

const { Model, DataTypes } = require('sequelize')
const { sequelize } = require('../db')
const { User } = require('./user')

class UserResetToken extends Model {

}

UserResetToken.init({
  token: {
    type: DataTypes.TEXT,
    allowNull: false
  },
  expiresIn: {
    type: DataTypes.DATE,
    allowNull: false
  },
  state: {
    type: DataTypes.STRING,
    defaultValue: 'active',
    allowNull: false
  }
}, {
  sequelize,
  underscored: false
})

UserResetToken.belongsTo(User)

module.exports = {
  UserResetToken
}

然后,我需要创建 UserResetToken 记录,如下所示:

const createUserResetToken = async userId => {
  // I'm sure there are better ways of generating this token but, let's start with this for now.
  const token = uuidv4()
  const expiresIn = new Date()

  expiresIn.setMinutes(expiresIn.getMinutes() + 30)

  const userResetToken = await UserResetToken.create({
    UserId: userId,
    token,
    expiresIn,
    state: ACTIVE
  })

  return userResetToken.id ? token : false
}

注意大写 U 的 UserId。如果我尝试执行 userId,我会得到列中具有空值的记录。

我很想只使用驼峰命名法来完成所有这一切,我也尝试使用下划线:true,但问题变得更糟。

有什么想法吗?

node.js postgresql sequelize.js
1个回答
0
投票

如果您希望使用非默认显式外键字段名称,请在关联中的

foreignKey
选项中指出:

UserResetToken.belongsTo(User, { foreignKey: 'userId' })

另请参阅我的其他答案这里

© www.soinside.com 2019 - 2024. All rights reserved.