Untitled

 avatar
unknown
plain_text
4 years ago
4.8 kB
2
Indexable
const mysql = require('mysql');
const Config = require('config');
const { func } = require('joi');
const db = Config.get('mysql.dbConfig')
var connection;
const dbConfig = {
    host: Config.get('mysql.dbConfig.host'),
    user: Config.get('mysql.dbConfig.user'),
    password: Config.get('mysql.dbConfig.password'),
    database: Config.get('mysql.dbConfig.database')
}

// handleDisconnect = () => {
//    connection = mysql.createConnection(dbConfig); // 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,
//         } 
//         else
//             {
//                 console.log('Connection succeed ');
//             }                                    // 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();


// //local mysql db connection

// // const connection = mysql.createConnection({
// //     host     : Config.get('mysql.dbConfig.host'),
// //     user     : Config.get('mysql.dbConfig.user'),
// //     password : Config.get('mysql.dbConfig.password'),
// //     database : Config.get('mysql.dbConfig.database')

// // });

// // connection.connect((err)=> {
// //     if (err) 
// //     {
// //         console.log('Connection failed \n Error:'+JSON.stringify(err));

// //     }
// //     else
// //     {
// //         console.log('Connection succeed ');
// //     }
// // });

// module.exports = connection;



//- Connection configuration


//- Create the connection variable
var connection = mysql.createConnection(dbConfig);

//- Establish a new connection
connection.connect(function(err){
    if(err) {
        // mysqlErrorHandling(connection, err);
        console.log("\n\t *** Cannot establish a connection with the database. ***");

        connection = reconnect(connection);
    }else {
        console.log("\n\t *** New connection established with the database. ***")
    }
});

//- Reconnection function
function reconnect(connection){
    console.log("\n New connection tentative...");

    //- Destroy the current connection variable
    if(connection) connection.destroy();

    //- Create a new one
    var connection = mysql.createConnection(dbConfig);

    //- Try to reconnect
    connection.connect(function(err){
        if(err) {
            //- Try to connect every 2 seconds.
            setTimeout(reconnect, 2000);
        }else {
            console.log("\n\t *** New connection established with the database. ***")
            return connection;
        }
    });
}

//- Error listener
connection.on('error', function(err) {

    //- The server close the connection.
    if(err.code === "PROTOCOL_CONNECTION_LOST"){    
        console.log("/!\\ Cannot establish a connection with the database. /!\\ ("+err.code+")");
        connection = reconnect(connection);
    }

    //- Connection in closing
    else if(err.code === "PROTOCOL_ENQUEUE_AFTER_QUIT"){
        console.log("/!\\ Cannot establish a connection with the database. /!\\ ("+err.code+")");
        connection = reconnect(connection);
    }

    //- Fatal error : connection variable must be recreated
    else if(err.code === "PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR"){
        console.log("/!\\ Cannot establish a connection with the database. /!\\ ("+err.code+")");
        connection = reconnect(connection);
    }

    //- Error because a connection is already being established
    else if(err.code === "PROTOCOL_ENQUEUE_HANDSHAKE_TWICE"){
        console.log("/!\\ Cannot establish a connection with the database. /!\\ ("+err.code+")");
    }

    //- Anything else
    else{
        console.log("/!\\ Cannot establish a connection with the database. /!\\ ("+err.code+")");
        connection = reconnect(connection);
    }

});
module.exports=connection
Editor is loading...