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
- 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.
- Generació d'un Error: La ruta
/
genera un error intencionat per demostrar la captura d'errors. - 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
Exercicis Pràctics
Exercici 1: Middleware d'Errors Bàsic
- Crea una aplicació Express.
- Defineix una ruta que generi un error.
- 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
- Crea una ruta asíncrona que generi un error.
- 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
- Introducció a Express.js
- Configuració d'una Aplicació Express
- Middleware
- Routing en Express
- Gestió d'Errors
Mòdul 7: Bases de Dades i ORMs
- Introducció a les Bases de Dades
- Utilitzar MongoDB amb Mongoose
- Utilitzar Bases de Dades SQL amb Sequelize
- Operacions CRUD
Mòdul 8: Autenticació i Autorització
Mòdul 9: Proves i Depuració
- Introducció a les Proves
- Proves Unitàries amb Mocha i Chai
- Proves d'Integració
- Depuració d'Aplicacions Node.js
Mòdul 10: Temes Avançats
Mòdul 11: Desplegament i DevOps
- Variables d'Entorn
- Utilitzar PM2 per a la Gestió de Processos
- Desplegar a Heroku
- Integració i Desplegament Continu