Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check mysql connection in sequelize

I have a very simple program in where I create a Sequelize instance and then I perform a raw query on a mysql database. The case is that when MySql is up and running there is no problem, I can perform the query with no problems. But when MySql is not running then the query doesn't emmit any error until the query timeout has reached and then it emmits a ETIMEOUT error. But that's not really what's happening. I expect the query to emit ENOTFOUND error or something like that if mysql is not running so I can manage the error and perform different actions if Mysql has gone down or Mysql is very busy and has a very large response time. What shoul'd I do to check if Mysql is up and running without having to wait the timeout exception.

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); }); 
like image 840
vistur Avatar asked Oct 17 '13 14:10

vistur


People also ask

How does Sequelize connect to database?

To connect to a database, you need to open a connection stream between Sequelize and the running MySQL Daemon. So, create a directory named config in the application root, and create a file named database. js inside the config directory.

How does Sequelize connection pool work?

Configuring the Connection Pool Size in Sequelize Whenever your application connects to a database, it actually forks a new process to fulfill the request. As stated in the official documentation, Sequelize sets up a connection pool on initialization that can be configured through the constructor's options parameter.


2 Answers

As of latest version of Sequelize (i.e. 3.3.2), authenticate can be used to check the connection:

var sequelize = new Sequelize("db", "user", "pass");  sequelize.authenticate().then(function(errors) { console.log(errors) }); 

authenticate simply runs SELECT 1+1 AS result query to check the db connection.

UPDATE:

Errors by the newest API need to be handled in catch:

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

UPDATE 2:

I haven't tested this, but its only logical that the same thing can be reached with async/await:

try {   await sequelize.authenticate() } catch (err) {   console.error('Unable to connect to the database:', err) } 
like image 124
Yan Foto Avatar answered Sep 22 '22 17:09

Yan Foto


You won't see errors, like password authentication errors, in .then.

From the sequelize documentation here:

You can use the .authenticate() function like this to test the connection.

sequelize   .authenticate()   .then(function(err) {     console.log('Connection has been established successfully.');   })   .catch(function (err) {     console.log('Unable to connect to the database:', err);   }); 
like image 44
Nate Avatar answered Sep 24 '22 17:09

Nate