我正在使用 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,但问题变得更糟。
有什么想法吗?
如果您希望使用非默认显式外键字段名称,请在关联中的
foreignKey
选项中指出:
UserResetToken.belongsTo(User, { foreignKey: 'userId' })
另请参阅我的其他答案这里