我正在构建一个React Native
应用程序,将MYSQL
作为数据库,并在Node.js
上使用Sequelize
ORM。问题是,我有一个名为Like
的表,还有一个名为userId
的列字段,我只是在其中存储用户ID。但userId
字段会随机清除。就像我重新启动数据库时一样,或者出现错误,需要重新启动数据库,或者正在重新启动Android Emulator
。
下面是它的外观:
CreateLikeModel.init({
id:{
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false,
},
userId:{
type: DataTypes.STRING,
allowNull: true
},
food_Name:{
type: DataTypes.STRING,
allowNull: false
},
food_id:{
type: DataTypes.INTEGER,
allowNull: false
}
},
这是用户执行类似功能时保存user Id
的函数的一部分:
const user = await CreateCustomer.findOne({where: {id: req.user.id}});
const likeObj ={
user_Id: user?.dataValues?.id?.toString(),
food_Name: food?.dataValues?.food_Name,
food_id: food.dataValues.id as number
}
//check if this user has liked this food
const checkUser = checkLike.find((single)=> single?.dataValues.userId ==
user.dataValues.id);
if(checkUser){
const getLike = await CreateLikeModel.findOne({where: {food_Name:
food.dataValues.food_Name, userId: user?.dataValues.id}});
await getLike?.destroy();//delete the like from the record if the user already liked;
return res.status(200).json('unliked');
}
await CreateLikeModel.create({...likeObj});
return res.status(200).json('liked');
我连接到数据库是这样的:
sequelizeDB.sync({alter: true}).then(()=>{
console.log('connected to datatbase')
})
我试着将userId
保存为字符串,因为它之前是一个数字,最初使用number时,它通常会将userId
的值重置为0
,但仍然没有解决问题。
以前我使用user_name
而不是userId
时没有发生过这种情况。什么原因导致了这个问题?目前,我通常在删除值时手动将其输入回数据库。
1条答案
按热度按时间xqnpmsa81#
在
likeObj
(用作like对象的创建属性)内部,用户ID字段为snake caseuser_Id
,在您的模型中,我看到它位于camelCaseuserId
中。我怀疑这就是它不能正确填充数据的根本原因,但是请记住,正如Sequelize文档中所述,
.sync({ alter: true })
可能是一个破坏性操作。