在sequelize中检查mysql连接

时间:2013-10-17 14:14:31

标签: mysql node.js sequelize.js

我有一个非常简单的程序,我在其中创建Sequelize实例,然后在mysql数据库上执行原始查询。 这种情况是,当MySql启动并运行时没有问题,我可以毫无问题地执行查询。 但是当MySql没有运行时,查询在查询超时达到之前不会发出任何错误,然后它会导致ETIMEOUT错误。但那并不是真正发生的事情。我希望查询发出ENOTFOUND错误或类似的东西,如果mysql没有运行,所以我可以管理错误并执行不同的操作,如果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);
});

4 个答案:

答案 0 :(得分:30)

截至CIQRCodeGenerator的最新版本(即var sequelize = new Sequelize("db", "user", "pass"); sequelize.authenticate().then(function(errors) { console.log(errors) }); ),Sequelize可用于检查连接:

authenticate

SELECT 1+1 AS result只需运行catch查询来检查数据库连接。

<强>更新

需要在sequelize .authenticate() .then(() => { console.log('Connection has been established successfully.'); }) .catch(err => { console.error('Unable to connect to the database:', err); }); 处理authenticate的错误:

XmlDocument

答案 1 :(得分:5)

您无法在.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);
  });

答案 2 :(得分:0)

如果系统变量被重置为某个微不足道的值,请检查“wait_timeout”系统变量

答案 3 :(得分:0)

我使用以下代码等待db引擎启动:

function sleep(ms) {

    return new Promise(function(resolve) {

        setTimeout(resolve, ms);
    });
}

for (;;) {

    try {

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

        await sleep(1000);
    }
}