Maison  >  Article  >  interface Web  >  Explication détaillée de la gestion des exceptions de base de données par NodeJs

Explication détaillée de la gestion des exceptions de base de données par NodeJs

php中世界最好的语言
php中世界最好的语言original
2018-04-17 10:12:081147parcourir

Cette fois, je vous apporte une explication détaillée de la gestion des exceptions de base de données par NodeJ. Quelles sont les précautions pour la gestion des exceptions de base de données dans NodeJs. Voici des cas réels, jetons un coup d'œil.

Version NodeJs : 4.4.4

Erreur de lien de base de données

Le plus gênant est d'utiliser nodejs pour gérer les exceptions. Ici, je laisse de côté le domain fourni par nodejs et certaines choses spécialement gérées par des bibliothèques tierces. L'exploitation de la base de données est une fonction couramment utilisée pour nous. Grâce aux rappels, nous aurons beaucoup d'erreurs ici.

Comme suit :

var pool = require('../db.js');
var runtimeLog = require('../log.js').getLogger('runlog');
var Promise = require('bluebird');
function queryPromise(queryString) {
  return new Promise(function(resolve, reject) {
    pool.getConnection(function(err, connection) {
    
      //connection.query(queryString, function(err, rows, fields) {
        
      // if (!err) {
      //   resolve(rows);
      //  } else {
      //   runtimeLog.error(err)
      //   reject(err)
      //  }
      // connection.release();
      //});
    })
  })
}
module.exports = function() {
  return new Promise(function(resolve, reject) {
    queryPromise("select * from wb123_home_map GROUP BY onestair")
      .then(function(results){
        resolve(results);
      })
      .catch(function(err){
        runtimeLog.error(err)
      })
  })
}

Vous pouvez voir que des erreurs peuvent se produire dans les deux rappels.

Et c'est un module, nous l'avons exporté.

Ici, nous avons délibérément renseigné le mauvais numéro de port pour le lien de la base de données et l'avons écrit comme 330666 :

module.exports = {
  host:   '192.168.6.101',
  database: 'web123',
  user:   'root',
  password: 'passw0rd',
  protocol: 'mysql',
  port:   '330666',
  query:  {pool: true}
}

Dans ce cas, une erreur se produira lors de la connexion à la base de données.

Ici, nous utilisons promise, donc dans la fonction exportée , nous utilisons catch, qui détectera l'erreur dans la fonction queryPromise et l'imprimera dans le journal.

[2017-01-05 13:27:59.648] [ERROR] runlog - [err] [RangeError: port should be >= 0 and < 65536: 330666]
RangeError: port should be >= 0 and < 65536: 330666
...

Erreur d'instruction SQL de base de données

Modifions le code, remplissons correctement le lien de base de données et modifions l'instruction SQL en une mauvaise instruction.

var pool = require('../db.js');
var runtimeLog = require('../log.js').getLogger('runlog');
var Promise = require('bluebird');
function queryPromise(queryString) {
  return new Promise(function(resolve, reject) {
    pool.getConnection(function(err, connection) {
      
      connection.query(queryString, function(err, rows, fields) {
        //if (err) throw err;
        if (!err) {
          resolve(rows);
         } else {
          reject(err)
         }
        connection.release();
      });
    })
  })
}
module.exports = function() {
  return new Promise(function(resolve, reject) {
    queryPromise("select * from wb123_home_map GROUP BY onestairs")
      .then(function(results){
        resolve(results);
      })
      .catch(function(err){
        runtimeLog.error('[err]',err)
      })
  })
}

Message d'erreur :

[2017-01-05 14:40:14.518] [ERROR] runlog - [err] { [Error: ER_BAD_FIELD_ERROR: Unknown column 'onestairs' in 'group statement']
 code: 'ER_BAD_FIELD_ERROR',
 errno: 1054,
 sqlState: '42S22',
 index: 0 }
Error: ER_BAD_FIELD_ERROR: Unknown column 'onestairs' in 'group statement'
  at Query.Sequence._packetToError (E:\zz\zz_wb123\manage\trunk\code\nod
....

Vous pouvez voir que les erreurs sont toutes générées via catch.

Donc, si Promise est utilisé, nous pouvons directement intercepter l'exception lancée ci-dessous dans catch. Il n'est pas nécessaire de consigner les exceptions dans la fonction queryPromise.

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn