Menu
CoddyTech

Fehler und Exit-Codes

Teil des Abschnitts Node.js-Grundlagen der Node.js-Journey von Coddy. Lektion 5 von 33.

Wenn ein Befehl fehlschlägt, muss die Person am Terminal sehen können, warum, und jedes Programm, das deines ausgeführt hat, muss wissen, dass es fehlgeschlagen ist.

Ein Programm hat zwei Ausgabeströme: stdout für Ergebnisse und stderr für Fehler, geschrieben mit console.error. Wenn es endet, gibt es einen Exit-Code zurück: 0 bedeutet, dass es funktioniert hat, alles andere bedeutet, dass es fehlgeschlagen ist. process.exit(1) stoppt das Programm sofort mit dem Code 1.

// node divide.js 6 0
const [a, b] = process.argv.slice(2).map(Number);
if (b === 0) {
    console.error('Cannot divide by zero');
    process.exit(1);
}
console.log(a / b);

Das Terminal neben deinem Code zeigt stderr rot an und gibt den Exit-Code aus, wenn er nicht 0 ist.

challenge icon

Aufgabe

Einfach

Wenn jemand dein Tool falsch verwendet, sollte es erklären, wie man es benutzt, und dem Terminal mitteilen, dass es fehlgeschlagen ist. Programme erledigen das mit dem Fehlerdatenstrom stderr und einem Exitcode.

  1. Ändere in notes.js den abschließenden else-Zweig, also den, der Unknown command: ausgibt. Fehler gehen an stderr, gib sie also mit console.error statt mit console.log aus.
  2. Wenn ein Befehl eingegeben wurde, aber unbekannt ist, gib diese beiden Zeilen in dieser Reihenfolge an stderr aus:
    Unknown command: remove
    Usage: node notes.js <command> [words]
    Die erste Zeile nennt das eingegebene Wort: hier remove, aus node notes.js remove 3. Die zweite Zeile ist immer gleich. Kopiere sie genau so, mit <command> und [words], wie geschrieben: Sie sind Teil des Textes und keine Platzhalter, die ausgefüllt werden sollen.
  3. Wenn nach node notes.js nichts eingegeben wurde, gib nur die Nutzungszeile an stderr aus. Gib Unknown command: undefined nicht aus.
  4. Beende das Programm in beiden Fällen mit Exitcode 1; das bedeutet „es ist fehlgeschlagen“.
  5. add und list funktionieren wie zuvor. node notes.js add Buy milk gibt weiterhin Adding: Buy milk aus und endet mit Exitcode 0.

Probiere es aus: Drücke auf „Ausführen“, während das Feld nach $ node notes.js leer ist. Du siehst die Nutzungszeile rot, und das Terminal zeigt Exitcode 1 an. Gib dann remove 3 ein und drücke die Eingabetaste: Du siehst Unknown command: remove und die Nutzungszeile, beide rot, sowie Exitcode 1. Gib anschließend add Buy milk ein: Du siehst Adding: Buy milk in der normalen Farbe und keinen Exitcode, weil das Terminal eine 0 ausblendet.

Probier es selbst

// Dein Notiz-Tool beginnt hier.
const [command, ...words] = process.argv.slice(2);
const text = words.join(' ');

if (command === 'add') {
    console.log(`Adding: ${text}`);
} else if (command === 'list') {
    console.log('No notes yet');
} else {
    console.log(`Unknown command: ${command}`);
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Node.js-Grundlagen

Übe selbstständig: Express-Playground