私はnode.jsで非常に新しいです。node.jsでデータベース(mysql)の再接続が可能であることを知りたいだけですか?
データベースがほんの一瞬ダウンしたときに接続を確立するために、次のコードを書きました。
var http = require("http");
var mysql = require('mysql');
var trn_nbr="";
var amount1="";
var db_config = {
host : 'localhost',
user : 'root',
password : '',
database: 'realmoney'
};
var connection;
function handleDisconnect() {
connection = mysql.createConnection(db_config);
connection.connect(function(err)
{
if(err)
{
console.log('error when connecting to db:', err);
//setTimeout(handleDisconnect, 10000);
handleDisconnect();
}
else
{
console.log("Now Connected");
connection = mysql.createConnection(db_config);
for (var i=0; i<1000; i++)
{
connection.query("select tran_nbr,tran_amount from tranlog", function(err, rows)
{
if(err)
{
if (err.code !== "PROTOCOL_CONNECTION_LOST")
throw err;
else
{
console.log('query error when connecting to db:', err);
//setTimeout(handleDisconnect, 10000);
handleDisconnect();
}
}
else
{
tran_nbr = rows[0].tran_nbr;
amount1 = rows[0].tran_amount;
console.log("tran_nbr:",tran_nbr);
console.log("Amount:",amount1);
//sleep.sleep(5);//sleep for 5 seconds
}
})
}
}
});
connection.on('error', function(err) {
console.log('db error', err);
if(err.code === 'PROTOCOL_CONNECTION_LOST')
{
handleDisconnect();
}
else
{
throw err;
}
});
}
handleDisconnect();
また、コードの何が問題なのかを教えていただけると助かります。
次のコードを使用して接続プールを実装しましたが、コードの一部が機能していません。
var mysql = require('mysql');
var pool = mysql.createPool({
host : 'localhost',
user : 'root',
password : '',
database: 'realmoney'
});
exports.getUsers = function(callback) {
pool.getConnection(function(err, connection) {
if(err) { console.log(err); callback(true); return; }
var sql = "SELECT id,name FROM users";
connection.query(sql, [], function(err, results) {
connection.release(); // always put connection back in pool after last query
if(err) { console.log(err); callback(true); return; }
callback(false, results);
});
});
});
サーバーに接続プールモジュールを既にインストールしています。Linux サーバーで node.js コードを実行しています。node.jsでアプリケーションを再起動せずに、mysqlデータベースが数秒間ダウンしたときに再接続し、再びアップできますか?