React app with nodejs/express server and mysql database doesn't load data right away when first visiting the home page. Related to mysql connection
I have an app with the server hosted on heroku where 15 of the latest entries in the database should show up when going to the home page. I have a a conifg.js file where I establish a connection to the database. The code used to be
const mysql = require('mysql');
const db = mysql.createConnection({
host: 'host',
database: 'db',
user: 'user',
password: 'password',
});
module.exports = db;
This was loading the latest entries on the home page properly on first visit but my app was experiencing crashes due to I believe it trying to query without there being a connection? Not entirely sure. I changed this code to
const mysql = require('mysql');
let connection=null;
function handleDisconnect() {
connection = mysql.createConnection({
host: "host",
user: "user",
password: "password",
database: "db"
}); // Recreate the connection, since
// the old one cannot be reused.
connection.connect(function (err) { // The server is either down
if (err) { // or restarting (takes a while sometimes).
console.log('error when connecting to db:', err);
setTimeout(handleDisconnect, 2000); // We introduce a delay before attempting to reconnect,
} // to avoid a hot loop, and to allow our node script to
}); // process asynchronous requests in the meantime.
// If you're also serving http, display a 503 error.
connection.on('error', function (err) {
console.log('db error', err);
if (err.code === 'PROTOCOL_CONNECTION_LOST') { // Connection to the MySQL server is usually
handleDisconnect(); // lost due to either server restart, or a
} else { // connnection idle timeout (the wait_timeout
throw err; // server variable configures this)
}
});
}
handleDisconnect();
setInterval(function () {
connection.query('SELECT 1');
}, 5000);
module.exports = connection;
My app is no longer crashing but is experiencing a delay in retrieving data from the database. Not sure what changes to make to handle both the crash issue as well as the delay when loading the page.
Via Active questions tagged javascript - Stack Overflow https://ift.tt/2FdjaAW
Comments
Post a Comment