我有一个非常简单的程序,我在其中创建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);
});
答案 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);
}
}