在sequelize中检查mysql连接

vis*_*tur 22 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);
});
Run Code Online (Sandbox Code Playgroud)

Yan*_*oto 34

截至最新版Sequelize(ie 3.3.2),authenticate可用于检查连接:

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

sequelize.authenticate().then(function(errors) { console.log(errors) });
Run Code Online (Sandbox Code Playgroud)

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);
  });
Run Code Online (Sandbox Code Playgroud)

  • @TiagoGouvêa旧API在`then`中返回了错误。较新的使用正确的承诺! (2认同)

Nat*_*ate 5

您不会在中看到错误,例如密码验证错误.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);
  });
Run Code Online (Sandbox Code Playgroud)