Heim  >  Artikel  >  Web-Frontend  >  Analyse benutzerdefinierter Fehlertypen unter Node.js

Analyse benutzerdefinierter Fehlertypen unter Node.js

不言
不言Original
2018-06-30 14:40:402378Durchsuche

Dieser Artikel gibt Ihnen eine detaillierte Einführung in die Anpassung von Fehlertypen unter Node.js. Er hat einen gewissen Referenzwert, damit jeder, der Node.js braucht, einen Blick darauf werfen kann. Werfen Sie einen Blick darauf.

Vorwort

Im Allgemeinen werden nur wenige Menschen über die Strategie nachdenken, wie mit Fehlern umgegangen werden soll, die von Anwendungen während des Debugging-Prozesses generiert werden Die Verwendung von console.log(‘error') zum Auffinden von Fehlern reicht grundsätzlich aus. Durch das Hinterlassen dieser Debugging-Informationen können wir im zukünftigen Debugging-Prozess viel Zeit sparen und die Wartbarkeit verbessern. Daher sind Fehlermeldungen sehr wichtig. Gleichzeitig wird es auch zu einer schlechten Nutzung kommen. In den letzten Projekten wurden benutzerdefinierte Fehlertypen verwendet, und ich hielt es für notwendig, mehr darüber zu erfahren. Deshalb habe ich diesen Artikel geschrieben, um es mir und allen anderen zu erleichtern, bei Bedarf auf sie zurückzugreifen.

Unterklassenfehler

Zuerst können wir eine Unterklasse von Fehler definieren. Die Implementierung erfolgt einfach über Object.create und util.inherits :

var assert = require('assert');
var util = require('util');

function NotFound(msg){
 Error.call(this);
 this.message = msg;
}
util.inherits(NotFound, Error);
var error = new NotFound('not found');
assert(error.message);
assert(error instanceof NotFound);
assert(error instanceof Error);
assert.equal(error instanceof RangeError, false);

Sie können instanceof verwenden, um den Fehlertyp zu überprüfen und entsprechend unterschiedliche Verarbeitungen durchzuführen der Typ.

Der obige Code legt das integrierte message fest, und error ist eine Instanz von NotFound und Error , aber nicht von RangeError.

Wenn Sie das express -Framework verwenden, können Sie andere properties s einrichten, um error nützlicher zu machen.

Beim Behandeln eines HTTP-Fehlers kann dieser beispielsweise so geschrieben werden:

function NotFound(msg) {
 Error.call(this);
 this.message = msg;
 this.statusCode = 404;
}

Jetzt können Sie Fehlermeldungen bereits über die Fehlerbehandlungs-Middleware verarbeiten:

app.use(function(err, req, res, next) {
 console.error(err.stack);

 if (!err.statusCode || err.statusCode === 500) {
 emails.error({ err: err, req: req });
 }

 res.send(err.statusCode || 500, err.message);
});

Dadurch wird der HTTP-Statuscode an den Browser gesendet, wenn err Wann statusCode nicht gesetzt ist oder gleich 500 ist, wird dieser Fehler per E-Mail gesendet. Dadurch werden die Fehler 404, 401, 403 usw. beseitigt.

Das Lesen von console.error(err.stack) funktioniert tatsächlich nicht wie erwartet, da Node, Chrome basierend auf V8 den schlechten Konstruktor von Error.captureStackTrace(this, arguments.callee) für Stack-Traces verwenden kann.

var NotFound = function(msg) {
 Error.call(this);
 Error.captureStackTrace(this, arguments.callee);
 this.message = msg || 'Not Found';
 this.statusCode = 404;
 this.name = "notFound"
}
util.inherits(NotFound, Error);

export.NotFoundError = NotFound;

Natürlich können wir den oben erstellten abstrakten Fehlertyp auch auf andere benutzerdefinierte Fehler erweitern:

var notFountError = require('./error').NotFountError; 
var UserNotFound = function(msg){
 this.constructor.super_(msg);
}

util.inherits(UserNotFound, notFoundError);

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Lernen aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Einführung in Moduldefinitionen in NodeJS

Wie NodeJS das asynchrone Bigpipe-Laden von Seiten implementiert

Über die node.js-Methode zum Lesen und Schreiben von Systemdateien und Verzeichnissen basierend auf dem fs-Modul

Das obige ist der detaillierte Inhalt vonAnalyse benutzerdefinierter Fehlertypen unter Node.js. 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