0

The Task

I am trying read all the records from one table, and insert them into another table. I will re-use these functions later on in the app.

The Problem

The data doesn't appear to be being passed correctly. I am not getting any errors, yet the records are not inserted.

I debugged the data variable, and all the records are consoled correctly. For some reason, I am losing them when I call my insertData function.

Note: My table name is results, which may be a little confusing. I may change that in the future.

Entire Source Code

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();

Data Structure


{
      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
    }

Schema


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;

Output

When I try to console.log the insertSuccess variable, which should show me a list of inserted id's:

.
.
.
console.log(insertSuccess);

Output Results

Community
  • 1
  • 1
John S.
  • 504
  • 1
  • 3
  • 18

0 Answers0