Sök…


Introduktion

Vi kommer att lära dig att skapa felobjekt och hur man kastar och hanterar fel i Node.js

Framtida redigeringar relaterade till bästa praxis vid felhantering.

Skapar felobjekt

nytt fel (meddelande)

Skapar ett nytt felobjekt där message ställs in på message för det skapade objektet. Vanligtvis vidarebefordras message till Error constructor som en sträng. Men om message är objekt inte en sträng kallar .toString() -metoden för det passerade objektet och sätter det värdet till message för det skapade felobjektet.

var err = new Error("The error message");
console.log(err.message); //prints: The error message
console.log(err);
//output
//Error: The error message
//    at ... 

Varje felobjekt har stapelspår. Stack trace innehåller informationen om felmeddelandet och visar var felet inträffade (ovanstående utgång visar felstacken). När felobjekt har skapats fångar systemet stapelspåret för felet på den aktuella raden. För att få spår av stacken, använd stackegenskapen för alla skapade felobjekt. Under två rader är identiska:

console.log(err);
console.log(err.stack);

Kasta fel

Att kasta fel betyder undantag om något undantag inte hanteras kommer nodservern att krascha.

Följande rad kastar fel:

throw new Error("Some error occurred"); 

eller

var err = new Error("Some error occurred");
throw err;

eller

throw "Some error occurred";

Det sista exemplet (kasta strängar) är inte god praxis och rekommenderas inte (kast alltid fel som är fall av felobjekt).

Observera att om du throw ett fel i din, kommer systemet att krascha på den raden (om det inte finns något undantagshanterare), kommer ingen kod att köras efter den raden.

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

Men i detta exempel:

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

försök ... fånga block

försök ... fångstblock är för att hantera undantag, kom ihåg undantag betyder att det kastade felet inte felet.

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
}

I try b++ orsakar ett fel och det felet skickas till catch som kan hanteras där eller till och med kan kastas samma fel i fångstblocket eller göra lite ändring sedan kast. Låt oss se nästa exempel.

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;
}

I exemplet ovan ändrade vi message för error och kastade sedan det modifierade error .

Du kan genom något fel i ditt försöksblock och hantera det i fångstblocket:

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 
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow