Задача
Я пытаюсь прочитать все записи из одной таблицы и вставить их в другую таблицу. Позже я повторно использую эти функции в приложении.
Проблема
Кажется, что данные передаются неправильно. Я не получаю никаких ошибок, но записи не вставлены.
Я отладил переменную data
, и все записи корректно обрабатываются. По какой-то причине я теряю их, когда вызываю свою функцию insertData
.
Примечание : имя моей таблицы results
, что может немного сбивать с толку. Я могу изменить это в будущем.
Весь исходный код
var mysql = require('mysql');
var connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "marketplace"
});
connection.connect(function (err) {
if (err) throw err;
console.log("Connected!");
})
const getData = function (tblName) {
var data = {};
switch (tblName) {
case "results":
sql = "SELECT * FROM results";
break;
case "items":
sql = "SELECT * FROM items";
break;
default:
sql = "SELECT * FROM results";
break;
}
return new Promise(resolve => {
connection.query(sql, function (err, results) {
if (err) {
console.log(err);
} else {
data.numResults = results.length;
data.data = results;
resolve(data);
}
})
})
}
const insertData = function (tbl, entity) {
return new Promise(resolve => {
var sql = `INSERT INTO ${tbl} (title,price,location,miles,imgUrl,itemURL) VALUES ?`;
var insertedIds = [];
for (var i = 0; i < entity.length; i++) {
connection.query(sql, entity[i], function (err, res) {
if (err) throw err;
insertedIds.push(res.insertId);
});
}
resolve(insertedIds);
})
}
const init = async function () {
var data = await getData("items");
console.log(data); // Works. Display all data
var insertSuccess = await insertData("results", data);
}
init();
Структура данных
{
id: 251,
title: '2008 Jeep Wrangler Unlimited Sahara Sport Utility 4D',
price: '$10,500',
location: 'Lake Sarasota, Florida',
miles: '123K miles',
itemURL: '/marketplace/item/174406817245706/',
imgUrl: 'https://scontent-mia3-1.xx.fbcdn.net/v/t1.0-0/c43.0.260.260a/p261x260/98434536_3577078698974198_8432375958719168512_n.jpg?_nc_cat=111&_nc_sid=843cd7&_nc_oc=AQlLn3CVPZmD4dKSsfXd-rV0WxXBo98zneuGAEgz2JP2yWrkt5rxI-fa1ShTtMGYbrw&_nc_ht=scontent-mia3-1.xx&oh=89e552882baeb14c642a1cd28b8ba683&oe=5EEA3991',
seen: 0,
created_date: 2020-05-20T20:45:24.000Z
}
Схема
DROP TABLE IF EXISTS `results`;
CREATE TABLE IF NOT EXISTS `results` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`price` varchar(255) DEFAULT NULL,
`location` varchar(255) DEFAULT NULL,
`miles` varchar(22) DEFAULT 'unavailable',
`itemURL` text,
`imgUrl` text,
`created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=612 DEFAULT CHARSET=latin1;
COMMIT;
Вывод
Когда я пытаюсь console.log переменная insertSuccess
, которая должна показать мне список вставленных идентификаторов:
.
.
.
console.log(insertSuccess);
Выходные результаты