Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 无法将数组的每个值作为单独的行存储在数据库表中_Mysql_Node.js_Sequelize.js - Fatal编程技术网

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": "

当用户首次创建帐户时,我的应用程序会发送一条包含用户信息的正文消息。其中一个值是“兴趣”数组,我的目标是让我的Node.js web服务将“兴趣”数组的每个值作为一个单独的行存储在一个mysql数据库表中。然而,问题是我的“兴趣”数组的最后一个值是为每一行存储的。下面,您将了解更多详细信息

请求主体示例:

{"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我更新了答案。请尝试新的解决方案。嗨,凯恩,我在同一时间找到了同一个解决方案!现在可以了!非常感谢您的帮助,非常感谢。