Node.js
Zarządzanie błędami w Node.js
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
}