Node.js
Gestione degli errori di Node.js
Ricerca…
introduzione
Impareremo come creare oggetti Error e come lanciare e gestire gli errori in Node.js
Modifiche future relative alle migliori pratiche nella gestione degli errori.
Creazione dell'oggetto Error
nuovo errore (messaggio)
Crea un nuovo oggetto errore, in cui il message
del valore viene impostato sulla proprietà del message
dell'oggetto creato. Di solito gli argomenti del message
vengono passati al costruttore Error come stringa. Tuttavia, se l'argomento del message
è oggetto non una stringa, il costruttore Error chiama il metodo .toString()
dell'oggetto passato e lo imposta sulla proprietà message
dell'oggetto error creato.
var err = new Error("The error message");
console.log(err.message); //prints: The error message
console.log(err);
//output
//Error: The error message
// at ...
Ogni oggetto di errore ha una traccia di stack. La traccia di stack contiene le informazioni del messaggio di errore e mostra dove si è verificato l'errore (l'output sopra mostra lo stack di errori). Una volta creato l'oggetto errore, il sistema acquisisce la traccia dello stack dell'errore sulla linea corrente. Per ottenere la traccia dello stack, utilizzare la proprietà stack di qualsiasi oggetto di errore creato. Sotto due righe sono identiche:
console.log(err);
console.log(err.stack);
Errore di lancio
Errore di lancio significa eccezione se nessuna eccezione viene gestita, quindi il server nodo si bloccherà.
La seguente riga genera un errore:
throw new Error("Some error occurred");
o
var err = new Error("Some error occurred");
throw err;
o
throw "Some error occurred";
L'ultimo esempio (tirare le stringhe) non è una buona pratica e non è raccomandato (genera sempre errori che sono istanze di oggetto Error).
Si noti che se si throw
un errore nel proprio, allora il sistema si bloccherà su quella linea (se non ci sono gestori di eccezioni), nessun codice verrà eseguito dopo quella linea.
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
Ma in questo esempio:
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
prova ... cattura blocco
prova ... il blocco catch è per la gestione delle eccezioni, ricorda che l'eccezione indica l'errore generato non l'errore.
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
}
Nel blocco try
b++
causano un errore e quell'errore è passato a catch
block che può essere gestito lì o addirittura può essere generato lo stesso errore nel catch block o apportare modifiche di poco valore e quindi lanciare. Vediamo il prossimo esempio.
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;
}
Nell'esempio sopra abbiamo modificato la proprietà message
dell'oggetto error
e poi lanciato l' error
modificato.
È possibile attraverso qualsiasi errore nel blocco try e gestirlo nel blocco 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
}