それは非同期だのなので、それが終了しますと、あなたがきたプロセス上のコントロールを持っているとなど
Sequelizeが自動的にあなたが行うとき、DBに接続します。
var sequelize = new Sequelize('connection string');
authenticate
がチェックするために、単純SELECT 1+1 AS result
を行いますそれは約束を返す接続で大丈夫です。
その結果、約束はerr
になります。これは接続に何か問題があることを示します。
de-synchronization
の問題は、ネットワーク、データベースのパフォーマンス/ビジネス、その他多くの要因になります。これを回避するには、スケジューリングを制御する必要があります。
だから、単純に次の操作を行います。
var async = require('async'); // npm i --save async
// creating custom object in sequelize object to track connection
sequelize.databaseConnectionStatus = {
connected: true,
status: 'online',
lastError: ''
};
async
.forever(function(next) {
sequelize
.authenticate()
.then(function(err) {
sequelize.databaseConnectionStatus.connected = (err) ? false : true;
sequelize.databaseConnectionStatus.status = (err) ? 'offline' : 'online';
sequelize.databaseConnectionStatus.lastError = err;
if(err) console.error(err);
setTimeout(next, 5000); // running check every 5 seconds
});
});
var count=0;
setInterval(function() { // independent loop to read connection status and emit by socket
count++;
socket.emit("cloud_database_status", sequelize.databaseConnectionStatus.status);
}, 2000);