Foutmeldingen (Error Messages) in Node.js

Doel: fouten begrijpen, lezen, oplossen en zelf duidelijke fouten maken.

Voor wie: je kent al wat JavaScript en kunt Node-scripts runnen met argumenten.

Leerdoelen

  1. Uitleggen wat een error message is.
  2. Belangrijkste onderdelen van een foutmelding herkennen.
  3. Fouten vinden en oplossen op basis van de melding.
  4. Zelf fouten genereren en afhandelen in code.

Waarom fouten je vriend zijn

  • Foutmeldingen vertellen wat en vaak waar het misgaat.
  • Tijdwinst: goed lezen voorkomt gokken.
  • Professionele code geeft gebruikers begrijpelijke feedback.

Tip: lees altijd eerst de eerste 3 regels van de stacktrace.

De anatomie van een error message


/pad/naar/app.js:1
console.log("Hallo);
             ^^^^^
SyntaxError: Invalid or unexpected token
    at Object.compileFunction (node:vm:360:18)
    ...
    
  • Bestand + regel: app.js:1
  • Caret ( ^ ): wijst naar de foutlocatie
  • Type fout: SyntaxError
  • Kernboodschap: korte uitleg (hier: string niet afgesloten)

Snel fouten lezen in 4 stappen

  1. Type: SyntaxError/TypeError/...
  2. Locatie: bestand + regelnummer
  3. Uitleg: eerste 1–2 zinnen
  4. Herproduceer: welke input triggert dit?

Pro-tip: begin bij de bovenste fout; rest kan gevolgschade zijn.

Veelvoorkomende fouttypes (1/2)

TypeWanneerVoorbeeld
SyntaxErrorCode kan niet geparsed wordenconsole.log("Hallo)
ReferenceErrorVariabele bestaat nietconsole.log(naam)

Veelvoorkomende fouttypes (2/2)

TypeWanneerVoorbeeld
TypeErrorVerkeerde bewerking voor type(42).toUpperCase()
RangeErrorWaarde buiten geldige rangearr.length = -1

Veelvoorkomende fouttypes (3/2)

TypeWanneerVoorbeeld
Custom ErrorZelf gegooide foutthrow new Error("...")

Oefening 1 — Fouten lezen en fixen

Maak errors.js, run node errors.js. Los elke fout op en zet erboven een comment met het fouttype en de fix.

Startercode


// OEFENING 1
console.log(naam);

// OEFENING 2
let getal = 42;
console.log(getal.toUpperCase());

  • Leg uit waarom je fix werkt.
  • Run opnieuw na elke fix.

Zelf fouten gooien met throw


function deel(a, b) {
  if (b === 0) {
    throw new Error("Je kunt niet delen door nul!");
  }
  return a / b;
}
console.log(deel(10, 0)); 
  • throw stopt de uitvoering.
  • Schrijf duidelijke, menselijke boodschappen.

Fouten afhandelen met try...catch


function deel(a, b) {
  if (b === 0) throw new Error("Je kunt niet delen door nul!");
  return a / b;
}
try {
  console.log(deel(10, 0));
} catch (error) {
  console.error("Er ging iets mis:");
  console.error(error.message); // alleen de boodschap
} 
  • try: voer uit
  • catch: handel fout af
  • Toon aan eindgebruikers bij voorkeur error.message

Betere foutmeldingen schrijven (1/2)

  • Specifiek: “Ongeldige operator: gebruik +, -, *, /.”
  • Kort + actiegericht: “Gebruik: node app.js <a> <b> <op>.”
  • Geen interne details: stacktrace is voor ontwikkelaars.

Betere foutmeldingen schrijven (2/2)

Gebruik console.error en exit-codes:


// Voorbeeld:
if (!isGeldig) {
  console.error("Ongeldige invoer. Zie: node app.js <getal1> <getal2> <operator>");
  process.exit(1); // 0 = succes, 1 = fout
}
    

Command line argumenten valideren (1/2)


// args: node calculator.js 10 5 +
const [, , aStr, bStr, op] = process.argv;

function parseGetal(s) {
  const n = Number(s);
  if (Number.isNaN(n)) {
    throw new Error(`"${s}" is geen getal.`);
  }
  return n;
} 

Command line argumenten valideren (2/2)


try {
  if (!aStr || !bStr || !op) {
    throw new Error("Ontbrekende argumenten. Gebruik: node calculator.js <a> <b> <operator>");
  }
  const a = parseGetal(aStr);
  const b = parseGetal(bStr);
  if (!["+","-","*","/"].includes(op)) {
    throw new Error(`Ongeldige operator "${op}". Kies uit + - * /`);
  }
  // Berekening...
} catch (err) {
  console.error("Fout:", err.message);
  process.exit(1);
}
    

Waarom: je vangt fouten dicht bij de oorzaak en communiceert helder.