Mysql 无法将数组的每个值作为单独的行存储在数据库表中
当用户首次创建帐户时,我的应用程序会发送一条包含用户信息的正文消息。其中一个值是“兴趣”数组,我的目标是让我的Node.js web服务将“兴趣”数组的每个值作为一个单独的行存储在一个mysql数据库表中。然而,问题是我的“兴趣”数组的最后一个值是为每一行存储的。下面,您将了解更多详细信息 请求主体示例:Mysql 无法将数组的每个值作为单独的行存储在数据库表中,mysql,node.js,sequelize.js,Mysql,Node.js,Sequelize.js,当用户首次创建帐户时,我的应用程序会发送一条包含用户信息的正文消息。其中一个值是“兴趣”数组,我的目标是让我的Node.js web服务将“兴趣”数组的每个值作为一个单独的行存储在一个mysql数据库表中。然而,问题是我的“兴趣”数组的最后一个值是为每一行存储的。下面,您将了解更多详细信息 请求主体示例: {"firstName": "Mason", "lastName": "Rad", "age": 19, "userId": "radMas28", "userPassword": "
{"firstName": "Mason",
"lastName": "Rad",
"age": 19,
"userId": "radMas28",
"userPassword": "fgjfh4534534",
"interests": ["hockey", "baseball", "basketball"]
}
我所尝试的:
var storeInterests = function(body) {
for(var interest in body.interests) {
database.sequelize.sync()
.then(() => database.Interests.create( {
userId: body.userId,
interest: body.interests[interest]
}));
}
};
存储在我的数据库中的内容:
我还尝试使用一个while循环,该循环一直持续到计数器变量到达body.interests array.length属性,但是出现了相同的问题
非常感谢您的帮助。问题在于database.sequelize.sync().then()是异步的,每次运行时,循环计数器都已迭代到最后一个值 试试这个
var storeInterests = function(body) {
for(var i=0; i<body.interests.length; i++) {
store(body.userId, body.interests[i])
}
};
function store(userId, interest) {
database.sequelize.sync()
.then(() => database.Interests.create( {
userId: userId,
interest: body.interests[i]
}));
}
var storeInterests=函数(body){
对于(var i=0;i database.Interests.create({
userId:userId,
兴趣:身体。兴趣[i]
}));
}
所以我找到了一个解决方案,但我担心它可能效率低下。有人能看一下吗
var storeInterests = function(body) {
for(var counter in body.interests) {
interestFunction(body.userId, body.interests, counter);
}
};
var interestFunction = function(id, interests, counter) {
database.sequelize.sync()
.then(() => database.Interests.create( {
userId: id,
interest: interests[counter]
}));
}
第一种方法是将数字“2”存储在“我的兴趣”列的每一行中。第二种方法是在表的兴趣列中不存储任何信息,只将userId存储在三个单独的行中,但没有兴趣值:(@JaredHart我更新了答案。请尝试新的解决方案。嗨,凯恩,我在同一时间找到了同一个解决方案!现在可以了!非常感谢您的帮助,非常感谢。