En aquest tema, explorarem el concepte de middleware en Express.js, un dels components més importants i potents d'aquest framework. El middleware és essencial per gestionar les peticions HTTP, manipular respostes, gestionar errors i molt més.
Què és el Middleware?
El middleware és una funció que té accés a l'objecte de petició (req
), l'objecte de resposta (res
) i la següent funció de middleware en el cicle de petició-resposta de l'aplicació. Aquestes funcions poden executar qualsevol codi, fer canvis a la petició i resposta, finalitzar el cicle de petició-resposta o cridar la següent funció de middleware.
Estructura d'una Funció Middleware
Una funció middleware en Express.js té la següent estructura:
function middlewareFunc(req, res, next) { // Executar qualsevol codi // Modificar els objectes req i res // Finalitzar el cicle de petició-resposta // O cridar a next() per passar al següent middleware }
Exemple Bàsic de Middleware
Vegem un exemple bàsic de middleware que registra la data i hora de cada petició:
const express = require('express'); const app = express(); // Middleware per registrar la data i hora de cada petició app.use((req, res, next) => { console.log('Time:', new Date().toISOString()); next(); // Passar al següent middleware }); app.get('/', (req, res) => { res.send('Hola, món!'); }); app.listen(3000, () => { console.log('Servidor escoltant al port 3000'); });
Tipus de Middleware
- Middleware d'Aplicació: S'aplica a tota l'aplicació.
- Middleware de Rutes: S'aplica a rutes específiques.
- Middleware d'Error: Gestiona errors en l'aplicació.
- Middleware Incorporat: Middleware que ve amb Express.js, com
express.json()
iexpress.urlencoded()
. - Middleware de Tercers: Middleware creat per la comunitat, com
morgan
per registrar peticions HTTP.
Middleware d'Aplicació
El middleware d'aplicació s'aplica a tota l'aplicació utilitzant app.use()
.
Middleware de Rutes
El middleware de rutes s'aplica a rutes específiques.
app.get('/ruta', (req, res, next) => { console.log('Middleware de ruta'); next(); }, (req, res) => { res.send('Resposta de la ruta'); });
Middleware d'Error
El middleware d'error té quatre arguments: err
, req
, res
, next
.
app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send('Alguna cosa ha anat malament!'); });
Middleware Incorporat
Express.js ve amb alguns middleware incorporats, com express.json()
i express.urlencoded()
.
Middleware de Tercers
Hi ha molts middleware de tercers disponibles. Per exemple, morgan
per registrar peticions HTTP.
Exercicis Pràctics
Exercici 1: Middleware de Registre
Crea un middleware que registri el mètode HTTP i la URL de cada petició.
const express = require('express'); const app = express(); // Middleware de registre app.use((req, res, next) => { console.log(`${req.method} ${req.url}`); next(); }); app.get('/', (req, res) => { res.send('Hola, món!'); }); app.listen(3000, () => { console.log('Servidor escoltant al port 3000'); });
Exercici 2: Middleware d'Autenticació
Crea un middleware que comprovi si l'usuari està autenticat abans de permetre l'accés a una ruta específica.
const express = require('express'); const app = express(); // Middleware d'autenticació function isAuthenticated(req, res, next) { const auth = true; // Simulació d'autenticació if (auth) { next(); } else { res.status(401).send('No autoritzat'); } } app.get('/privat', isAuthenticated, (req, res) => { res.send('Benvingut a la zona privada'); }); app.listen(3000, () => { console.log('Servidor escoltant al port 3000'); });
Resum
En aquest tema, hem après què és el middleware, la seva estructura i els diferents tipus de middleware en Express.js. També hem vist exemples pràctics de com utilitzar middleware per registrar peticions i autenticar usuaris. El middleware és una eina poderosa que permet modularitzar i gestionar de manera eficient les peticions i respostes en una aplicació Express.js.
En el següent tema, explorarem el routing en Express.js, una altra característica fonamental per construir aplicacions web robustes.
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