Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung der Behandlung von Datenbankausnahmen durch NodeJs

Detaillierte Erläuterung der Behandlung von Datenbankausnahmen durch NodeJs

php中世界最好的语言
php中世界最好的语言Original
2018-04-17 10:12:081096Durchsuche

Dieses Mal werde ich Ihnen eine detaillierte Erklärung zum Umgang mit Datenbankausnahmen durch NodeJs geben. Hier sind praktische Fälle. NodeJs-Version: 4.4.4

Datenbankverknüpfungsfehler

Am problematischsten ist es, NodeJS zur Behandlung von Ausnahmen zu verwenden. Hier lasse ich das von NodeJS bereitgestellte

und einige Dinge beiseite, die speziell von Bibliotheken von Drittanbietern behandelt werden. Der Betrieb der Datenbank ist für uns eine häufig genutzte Funktion. Durch Rückrufe werden wir hier viele Fehler machen.

domain Wie folgt:

Sie können sehen, dass bei beiden Rückrufen Fehler auftreten können.
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)
      })
  })
}

Und das ist ein Modul, wir haben es exportiert.

Hier haben wir absichtlich die falsche Portnummer für den Datenbanklink eingegeben und sie als 330666 geschrieben:

In diesem Fall tritt ein Fehler auf, wenn wir eine Verbindung zur Datenbank herstellen.
module.exports = {
  host:   '192.168.6.101',
  database: 'web123',
  user:   'root',
  password: 'passw0rd',
  protocol: 'mysql',
  port:   '330666',
  query:  {pool: true}
}

Hier verwenden wir Promise, also verwenden wir in der exportierten

-Funktion

Catch, das den Fehler in der queryPromise-Funktion abfängt und ihn im Protokoll ausgibt.

[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
...
Datenbank-SQL-Anweisungsfehler

Lassen Sie uns den Code ändern, den Datenbanklink korrekt ausfüllen und die SQL-Anweisung in die falsche Anweisung ändern.

Fehlermeldung:
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)
      })
  })
}

Sie können sehen, dass alle Fehler durch Catch ausgelöst werden.
[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
....

Wenn also Promise verwendet wird, können wir die unten in Catch ausgelöste Ausnahme direkt abfangen. Es ist nicht erforderlich, Ausnahmen in der Funktion queryPromise zu protokollieren.

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:



Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Behandlung von Datenbankausnahmen durch NodeJs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn