簡體   English   中英

在 sequelize 中檢查 mysql 連接

[英]Check mysql connection in sequelize

我有一個非常簡單的程序,我在其中創建了一個 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);
});

從最新版本的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查詢來檢查數據庫連接。

更新

最新 API 的錯誤需要在catch處理:

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

更新 2

我還沒有測試過這個,但它唯一的邏輯是使用async/await可以達到同樣的事情:

try {
  await sequelize.authenticate()
} catch (err) {
  console.error('Unable to connect to the database:', err)
}

您不會在.then看到錯誤,例如密碼驗證錯誤。

這里的續集文檔:

您可以像這樣使用 .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);
  });

請檢查“wait_timeout”系統變量是否已重置為某個微不足道的值

我使用以下代碼等待數據庫引擎啟動:

function sleep(ms) {

    return new Promise(function(resolve) {

        setTimeout(resolve, ms);
    });
}

for (;;) {

    try {

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

        await sleep(1000);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM