Datenbankverknüpfungsfehler
Die Verwendung von NodeJS zur Behandlung von Ausnahmen ist am problematischsten. Hier lasse ich das von NodeJS bereitgestellte domain
und einige Dinge, die speziell von Dritten behandelt werden, beiseite. Parteibibliotheken. 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) }) }) }
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} }
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 ...
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('../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) }) }) }
Fehlermeldung:
[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 ....
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.
Das obige ist der detaillierte Inhalt vonNodeJs-Lösung zur Behandlung von Datenbankausnahmen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!