Szukaj…


Wprowadzenie

Dowiemy się, jak tworzyć obiekty Error i jak rzucać i obsługiwać błędy w Node.js

Przyszłe zmiany związane z najlepszymi praktykami w zakresie obsługi błędów.

Tworzenie obiektu błędu

nowy błąd (komunikat)

Tworzy nowy obiekt błędu, w którym message wartości jest ustawiany na właściwość message tworzonego obiektu. Zwykle argumenty message są przekazywane do konstruktora błędów jako ciąg. Jeśli jednak argumentem message jest obiekt, a nie ciąg znaków, konstruktor błędów wywołuje .toString() przekazywanego obiektu i ustawia tę wartość na właściwość message utworzonego obiektu błędu.

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

Każdy obiekt błędu ma ślad stosu. Śledzenie stosu zawiera informacje o błędzie i pokazuje, gdzie wystąpił błąd (powyższe dane wyjściowe pokazują stos błędów). Po utworzeniu obiektu błędu system przechwytuje ślad stosu błędu w bieżącej linii. Aby uzyskać ślad stosu, należy użyć właściwości stosu dowolnego utworzonego obiektu błędu. Poniżej dwie linie są identyczne:

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

Błąd rzucania

Błąd rzucania oznacza wyjątek, jeśli jakikolwiek wyjątek nie zostanie obsłużony, serwer węzła ulegnie awarii.

Następująca linia zgłasza błąd:

throw new Error("Some error occurred"); 

lub

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

lub

throw "Some error occurred";

Ostatni przykład (wyrzucanie ciągów) nie jest dobrą praktyką i nie jest zalecany (zawsze wyrzuca błędy, które są instancjami obiektu Error).

Zauważ, że jeśli throw błąd do swojego systemu, system zawiesi się na tym wierszu (jeśli nie ma programów obsługi wyjątków), po tym wierszu nie zostanie wykonany żaden kod.

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

Ale w tym przykładzie:

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

spróbuj ... złapać blok

try ... catch catch służy do obsługi wyjątków, pamiętaj, że wyjątek oznacza zgłoszony błąd, a nie błąd.

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
}

W bloku try b++ wystąpił błąd i ten błąd został przekazany do bloku catch , który można tam obsłużyć, a nawet może zostać zgłoszony ten sam błąd w bloku catch lub dokonać niewielkiej modyfikacji, a następnie wyrzucić. Zobaczmy następny przykład.

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

W powyższym przykładzie zmodyfikowaliśmy właściwość message obiektu error a następnie wyrzuciliśmy zmodyfikowany error .

Możesz przez dowolny błąd w bloku try i obsłużyć go w bloku catch:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow