我正在使用Node JS,我正在尝试连接到mysql数据库。它因超时而不断断开连接,所以我写了一个函数来重新连接,如果它超时。虽然我需要它是一个连续的连接或我的代码中的引用不起作用。这是我的相关代码:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : '.........', // MySQL Host
user : '.........', // MySQL User
password : '.........', // MySQL Password
database : '.........' // MySQL Databse
});
// MYSQL INFO
//connection.connect();
function replaceClientOnDisconnect(connection) {
connection.on("error", function (err) {
if (!err.fatal) {
console.log('Databse Error, error not fatal');
return;
}
if (err.code !== "PROTOCOL_CONNECTION_LOST") {
throw err;
console.log('PROTOCOL_CONNECTION_LOST Error: Reconnecting to database...');
}
setTimeout(function () {
connection.destroy();
connection = mysql.createConnection(connection.config);
replaceClientOnDisconnect(connection);
connection.connect(function (error) {
if (error) {
process.exit(1);
} else {
console.log('Reconnected to database!');
}
}, 1000); // 1 sec
});
});
}
// And run this on every connection as soon as it is created.
replaceClientOnDisconnect(connection);
答案 0 :(得分:8)
您可以使用样本
var dbConfig = {
host: '----',
user: '----',
password: '----',
database: '----',
port: ----
};
var connection;
function handleDisconnect() {
connection = mysql.createConnection(dbConfig); // Recreate the connection, since the old one cannot be reused.
connection.connect( function onConnect(err) { // The server is either down
if (err) { // or restarting (takes a while sometimes).
console.log('error when connecting to db:', err);
setTimeout(handleDisconnect, 10000); // 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 onError(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();