Heim > Web-Frontend > js-Tutorial > Detaillierte Erläuterung der Datenbank-Ausnahmebehandlung in NodeJs

Detaillierte Erläuterung der Datenbank-Ausnahmebehandlung in NodeJs

小云云
Freigeben: 2018-01-03 11:28:50
Original
1983 Leute haben es durchsucht

Dieser Artikel führt hauptsächlich eine kurze Diskussion der Datenbankausnahmebehandlung in NodeJs ein. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz geben. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.

NodeJs-Version: 4.4.4

Datenbankverknüpfungsfehler

Die Verwendung von NodeJS zur Behandlung von Ausnahmen ist am problematischsten, aber hier werde ich diese ignorieren bereitgestellt von nodejsdomainUnd einige Bibliotheken von Drittanbietern kümmern sich speziell um Dinge. Der Betrieb der Datenbank ist für uns eine häufig genutzte Funktion. Durch Rückrufe werden wir hier viele Fehler machen.

lautet wie folgt:


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)
      })
  })
}
Nach dem Login kopieren

Sie können sehen, dass bei beiden Rückrufen die Möglichkeit eines Fehlers besteht.

Und das ist ein Modul, wir haben es exportiert.

Hier geben wir absichtlich die falsche Portnummer für die Datenbankverbindung ein und schreiben sie als 330666:


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

In diesem Fall, wenn wir eine Verbindung herstellen In der Datenbank wird etwas schief gelaufen.

Hier verwenden wir Promise, also verwenden wir in der exportierten Funktion Catch, das den Fehler in der Funktion queryPromise 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
...
Nach dem Login kopieren

Datenbank-SQL-Anweisungsfehler

Lassen Sie uns den Code ändern, den Datenbanklink korrekt ausfüllen und Ändern Sie die SQL-Anweisung. Es handelt sich um eine falsche Anweisung.


var pool = require(&#39;../db.js&#39;);
var runtimeLog = require(&#39;../log.js&#39;).getLogger(&#39;runlog&#39;);
var Promise = require(&#39;bluebird&#39;);

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(&#39;[err]&#39;,err)
      })
  })
}
Nach dem Login kopieren

Fehlermeldung:


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

Sie können sehen, dass Fehler durch Catch ausgegeben werden.

Wenn also Promise verwendet wird, können wir die unten in „catch“ geworfene Ausnahme direkt abfangen. Es ist nicht erforderlich, Ausnahmen in der Funktion queryPromise zu protokollieren.

Hier ist eine sehr nützliche Stackoverflow-Fragen und Antworten zu Node-JS-Best-Practice-Exception-Handling

Verwandte Empfehlungen:

Über die Lösung bei unzureichendem Speicher verursacht durch PHP-Datenbankabfrage

Was soll ich tun, wenn der Systemfehler 1067 in der grünen Version der MySQL-Datenbank auftritt?

Ausführliche Erklärung der MySQL-Datenbank (Ubuntu 14.0.4 LTS 64)

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Datenbank-Ausnahmebehandlung in NodeJs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage