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:
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
-FunktionCatch, 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 ...
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) }) }) }
[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!