Obsługa błędów w Node.js

try, catch

W języku JavaScript dostępne są instrukcje try i catch, działające podobnie jak w innych językach programowania. Przykładowo, w przypadku synchronicznego fragmentu kodu obsługę błędów można zrealizować w następujący sposób:

const fs = require('fs');

try {
  // Synchroniczne wczytanie pliku o nazwie "my_file.txt"
  const fileContents = fs.readFileSync("my_file.txt", "utf8");
  console.log("Plik został wczytany");
}
catch (error) {
  // Poniższe instrukcje zostaną wykonane, jeśli podczas wykonywania
  // bloku kodu poprzedzonego poleceniem "try" wystąpi błąd.
  console.error("Nie udało się wczytać pliku");
  console.error(`Opis błędu:\n${error}`);
}

try, catch + async, await

Z instrukcji try, catch można korzystać również w programach asynchronicznych, używających promises, realizowanych za pomocą słów async, await. W takim wypadku, kod zawarty w bloku catch zostanie wykonany, jeśli promise zostanie odrzucona (tzn. przejdzie w stan rejected):

const { readFile } = require('fs').promises;

async function main() {
  try {
    // Asynchroniczne wczytanie pliku za pomocą promise
    const data = await readFile("my_file.txt", "utf8");

    // Poniższa instrukcja zostanie wykonana, jeśli
    // obietnica readFile zostanie spełniona (fulfilled)

    console.log(`Zawartość pliku:\n${data}`);
  }
  catch (rejectionReason) {
    // Poniższa instrukcja zostanie wykonana, jeśli
    // obietnica readFile zostanie odrzucona (rejected)

    console.error(`Nie udało się wczytać pliku, bo:\n${rejectionReason}`);
  }
}

Literatura