La gestió d'errors és una part fonamental del desenvolupament d'aplicacions robustes i fiables. En aquest tema, aprendrem com gestionar errors en una aplicació Express.js, incloent-hi la creació de middleware d'errors personalitzats i la manipulació d'errors asíncrons.

Continguts

Introducció a la Gestió d'Errors

La gestió d'errors en Express.js es basa en la creació de middleware específics per a la captura i manipulació d'errors. Aquests middleware poden interceptar errors que es produeixen durant el processament de les peticions i proporcionar respostes adequades als clients.

Tipus d'Errors

  • Errors de Client: Errors causats per peticions incorrectes o malformades (p. ex., 400 Bad Request).
  • Errors del Servidor: Errors que es produeixen al servidor durant el processament de la petició (p. ex., 500 Internal Server Error).

Middleware d'Errors en Express

Express permet definir middleware d'errors que capturen i gestionen errors de manera centralitzada. Un middleware d'errors es defineix com una funció amb quatre paràmetres: err, req, res, i next.

Exemple de Middleware d'Errors

const express = require('express');
const app = express();

// Middleware d'errors
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Alguna cosa ha anat malament!');
});

// Ruta que genera un error
app.get('/', (req, res) => {
  throw new Error('Error intencionat!');
});

app.listen(3000, () => {
  console.log('Servidor escoltant al port 3000');
});

Explicació del Codi

  1. Definició del Middleware d'Errors: El middleware d'errors es defineix amb quatre paràmetres. Aquí, simplement es registra l'error a la consola i es retorna una resposta amb un estat 500.
  2. Generació d'un Error: La ruta / genera un error intencionat per demostrar la captura d'errors.
  3. Inici del Servidor: El servidor escolta al port 3000.

Gestió d'Errors Asíncrons

Els errors asíncrons poden ser més complicats de gestionar, ja que es produeixen fora del flux de control immediat. Express.js proporciona maneres de capturar aquests errors.

Exemple amb Promeses

app.get('/async', (req, res, next) => {
  Promise.reject(new Error('Error asíncron!'))
    .catch(next); // Passa l'error al middleware d'errors
});

Exemple amb Async/Await

app.get('/async-await', async (req, res, next) => {
  try {
    throw new Error('Error asíncron amb async/await!');
  } catch (err) {
    next(err); // Passa l'error al middleware d'errors
  }
});

Exemples Pràctics

Middleware d'Errors Personalitzat

app.use((err, req, res, next) => {
  if (res.headersSent) {
    return next(err);
  }
  res.status(500);
  res.json({ error: err.message });
});

Gestió d'Errors 404

app.use((req, res, next) => {
  res.status(404).send('No trobat');
});

Exercicis Pràctics

Exercici 1: Middleware d'Errors Bàsic

  1. Crea una aplicació Express.
  2. Defineix una ruta que generi un error.
  3. Implementa un middleware d'errors que capturi i gestioni aquest error.

Solució

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  throw new Error('Error intencionat!');
});

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Alguna cosa ha anat malament!');
});

app.listen(3000, () => {
  console.log('Servidor escoltant al port 3000');
});

Exercici 2: Gestió d'Errors Asíncrons

  1. Crea una ruta asíncrona que generi un error.
  2. Implementa la captura d'aquest error i passa'l al middleware d'errors.

Solució

app.get('/async', (req, res, next) => {
  Promise.reject(new Error('Error asíncron!'))
    .catch(next);
});

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Alguna cosa ha anat malament!');
});

app.listen(3000, () => {
  console.log('Servidor escoltant al port 3000');
});

Conclusió

La gestió d'errors és essencial per a la creació d'aplicacions robustes i fiables. En aquest tema, hem après a crear middleware d'errors en Express.js, gestionar errors asíncrons i implementar exemples pràctics. Amb aquests coneixements, estàs preparat per gestionar errors de manera eficient en les teves aplicacions Node.js.

Curs de Node.js

Mòdul 1: Introducció a Node.js

Mòdul 2: Conceptes Bàsics

Mòdul 3: Sistema de Fitxers i I/O

Mòdul 4: HTTP i Servidors Web

Mòdul 5: NPM i Gestió de Paquets

Mòdul 6: Framework Express.js

Mòdul 7: Bases de Dades i ORMs

Mòdul 8: Autenticació i Autorització

Mòdul 9: Proves i Depuració

Mòdul 10: Temes Avançats

Mòdul 11: Desplegament i DevOps

Mòdul 12: Projectes del Món Real

© Copyright 2024. Tots els drets reservats