Node.js
Node.js Foutbeheer
Zoeken…
Invoering
We zullen leren hoe je Error-objecten kunt maken en hoe je fouten kunt gooien en verwerken in Node.js
Toekomstige bewerkingen met betrekking tot best practices in foutafhandeling.
Foutobject maken
nieuwe fout (bericht)
Maakt nieuwe foutobject, waarbij de waarde message
wordt ingesteld op message
eigenschap van het gemaakte object. Gewoonlijk worden de message
als een string doorgegeven aan Error constructor. Als het message
object geen string is, roept Error constructor de methode .toString()
van het doorgegeven object aan en stelt die waarde in op message
eigenschap van het gemaakte .toString()
.
var err = new Error("The error message");
console.log(err.message); //prints: The error message
console.log(err);
//output
//Error: The error message
// at ...
Elk foutobject heeft stack trace. Stack trace bevat de informatie van het foutbericht en geeft aan waar de fout is opgetreden (de bovenstaande uitvoer toont de foutstapel). Nadat het foutobject is gemaakt, legt het systeem de stacktracering van de fout op de huidige regel vast. Gebruik de stack-eigenschap van een gemaakt foutobject om de stacktracering te verkrijgen. Hieronder zijn twee lijnen identiek:
console.log(err);
console.log(err.stack);
Gooi fout
Gooi fout betekent uitzondering als een uitzondering niet wordt afgehandeld, crasht de knooppuntserver.
De volgende regel veroorzaakt een fout:
throw new Error("Some error occurred");
of
var err = new Error("Some error occurred");
throw err;
of
throw "Some error occurred";
Het laatste voorbeeld (het gooien van tekenreeksen) is geen goede oefening en wordt niet aanbevolen (gooi altijd fouten die voorbeelden zijn van een Error-object).
Merk op dat als u een fout in uw throw
, het systeem op die regel crasht (als er geen uitzonderingshandlers zijn), er na die regel geen code wordt uitgevoerd.
var a = 5;
var err = new Error("Some error message");
throw err; //this will print the error stack and node server will stop
a++; //this line will never be executed
console.log(a); //and this one also
Maar in dit voorbeeld:
var a = 5;
var err = new Error("Some error message");
console.log(err); //this will print the error stack
a++;
console.log(a); //this line will be executed and will print 6
probeer ... blok te vangen
probeer ... vangblok is voor het verwerken van uitzonderingen, onthoud uitzondering betekent de gegooide fout niet de fout.
try {
var a = 1;
b++; //this will cause an error because be is undefined
console.log(b); //this line will not be executed
} catch (error) {
console.log(error); //here we handle the error caused in the try block
}
In het try
blok veroorzaakt b++
een fout en die fout wordt doorgegeven aan het catch
blok dat daar kan worden afgehandeld of zelfs dezelfde fout in het catch-blok kan worden gegooid of een kleine wijziging kan aanbrengen en vervolgens gooien. Laten we het volgende voorbeeld bekijken.
try {
var a = 1;
b++;
console.log(b);
} catch (error) {
error.message = "b variable is undefined, so the undefined can't be incremented"
throw error;
}
In het bovenstaande voorbeeld hebben we de message
van het error
gewijzigd en vervolgens de gewijzigde error
.
Je kunt door elke fout in je try-blok en het afhandelen in het catch-blok:
try {
var a = 1;
throw new Error("Some error message");
console.log(a); //this line will not be executed;
} catch (error) {
console.log(error); //will be the above thrown error
}