Podręcznik
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 {
// 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}`);
}
}
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