web-dev-qa-db-fra.com

Vérifier la connexion mysql dans sequelize

J'ai un programme très simple dans lequel je crée une instance Sequelize, puis j'effectue une requête brute sur une base de données mysql. Le cas est que lorsque MySql est opérationnel, il n’ya pas de problème, je peux exécuter la requête sans problème. Mais lorsque MySql n’est pas en cours d’exécution, la requête n’émet aucune erreur jusqu’à le délai d'attente de la requête est écoulé et une erreur ETIMEOUT est émise. Mais ce n'est pas vraiment ce qui se passe. Je m'attends à ce que la requête génère une erreur ENOTFOUND ou quelque chose du genre si mysql n'est pas en cours d'exécution afin que je puisse gérer l'erreur et effectuer différentes actions si Mysql est tombé en panne ou si Mysql est très occupé et a un temps de réponse très long. Que dois-je faire pour vérifier si Mysql est opérationnel sans avoir à attendre l'exception de timeout.

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);
});
18
vistur

À partir de la dernière version de Sequelize (i.e. 3.3.2), authenticate peut être utilisé pour vérifier la connexion:

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

sequelize.authenticate().then(function(errors) { console.log(errors) });

authenticate exécute simplement la requête SELECT 1+1 AS result pour vérifier la connexion à la base de données.

UPDATE:

Les erreurs de la dernière API doivent être traitées dans catch:

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

Vous ne verrez pas les erreurs, comme les erreurs d'authentification de mot de passe, dans .then.

De la documentation de suite ici :

Vous pouvez utiliser la fonction .authenticate () comme ceci pour tester la connexion .

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

J'utilise le code suivant pour attendre le démarrage du moteur de base de données:

function sleep(ms) {

    return new Promise(function(resolve) {

        setTimeout(resolve, ms);
    });
}

for (;;) {

    try {

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

        await sleep(1000);
    }
}
0
Franck Freiburger

Veuillez vérifier la variable système "wait_timeout" si elle a été réinitialisée à une valeur triviale

0
avisheks