web-dev-qa-db-ja.com

sequelizeでmysql接続を確認する

Sequelizeインスタンスを作成し、次にmysqlデータベースで生のクエリを実行する非常に単純なプログラムがあります。ケースは、MySqlが起動して実行中に問題がなければ、問題なくクエリを実行できることです。ただし、MySqlが実行されていない場合、クエリのタイムアウトに達するまでクエリはエラーを発行せず、ETIMEOUTエラーを発行します。しかし、それは実際に起こっていることではありません。 mysqlが実行されていない場合は、クエリがENOTFOUNDエラーまたはそのようなものを発行するので、Mysqlがダウンした場合やMysqlが非常にビジーで応答時間が非常に長い場合にエラーを管理してさまざまなアクションを実行できます。タイムアウト例外を待たずにMysqlが稼働しているかどうかを確認するにはどうすればよいですか。

sequelize = new Sequelize(db_name, db_user, db_pass, opts);

sequelize.query('SELECT * FROM some_table').success(function(result) {
  console.log(result);
}).error(function(err) {
  console.log(err);
});
23
vistur

Sequelize (つまり3.3.2)の最新バージョンでは、接続の確認に authenticate を使用できます。

var sequelize = new Sequelize("db", "user", "pass");

sequelize.authenticate().then(function(errors) { console.log(errors) });

authenticateは単にSELECT 1+1 AS resultクエリを実行して、db接続を確認します。

[〜#〜]更新[〜#〜]

最新のAPI によるエラーはcatchで処理する必要があります:

sequelize
  .authenticate()
  .then(() => {
    console.log('Connection has been established successfully.');
  })
  .catch(err => {
    console.error('Unable to connect to the database:', err);
  });
37
Yan Foto

.thenには、パスワード認証エラーなどのエラーは表示されません。

続編のドキュメントから here

このような.authenticate()関数を使用して、接続をテストできます。

sequelize
  .authenticate()
  .then(function(err) {
    console.log('Connection has been established successfully.');
  })
  .catch(function (err) {
    console.log('Unable to connect to the database:', err);
  });
6
Nate

次のコードを使用して、dbエンジンの起動を待機します。

function sleep(ms) {

    return new Promise(function(resolve) {

        setTimeout(resolve, ms);
    });
}

for (;;) {

    try {

        await db.authenticate();
        break;
    } catch(ex) {

        await sleep(1000);
    }
}
0

「wait_timeout」システム変数を確認して、それが何らかの重要な値にリセットされているかどうかを確認してください

0
avisheks