0 Tage Serie
javascript / intermediate
Snippet

Strukturierte Fehlerverkettung mit benutzerdefinierten Ausnahmeklassen

Benutzerdefinierte Fehlerklassen, die von `Error` erben, helfen bei der Kategorisierung von Anwendungsfehlern. Die Übergabe eines Optionsobjekts mit der Eigenschaft `cause` an `super()` erzeugt eine explizite Fehlerkette zur einfacheren Fehlersuche.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class DatabaseError extends Error {
constructor(message, cause) {
super(message, { cause });
this.name = 'DatabaseError';
this.code = 'ERR_DB_QUERY_FAILED';
}
}
function fetchUserRecord(userId) {
try {
throw new TypeError('Invalid connection pointer');
} catch (rawErr) {
throw new DatabaseError(`Could not load record for user ${userId}`, rawErr);
}
}
try {
fetchUserRecord(42);
} catch (err) {
console.error(`${err.name}: ${err.message}`);
console.error(`Root cause: ${err.cause.message}`);
}
nodejs
Erklärung
1
class DatabaseError extends Error {
Definiert eine domänenspezifische Ausnahmeklasse, die Eigenschaften des Error-Prototyps erbt.
2
super(message, { cause });
Ruft den Eltern-Konstruktor auf und registriert den ursprünglichen untergeordneten Fehler unter `.cause`.
3
console.error(`Root cause: ${err.cause.message}`);
Greift auf die verkettete Ursache der benutzerdefinierten Ausnahme zu.