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

  1. Middleware d'Aplicació: S'aplica a tota l'aplicació.
  2. Middleware de Rutes: S'aplica a rutes específiques.
  3. Middleware d'Error: Gestiona errors en l'aplicació.
  4. Middleware Incorporat: Middleware que ve amb Express.js, com express.json() i express.urlencoded().
  5. 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().

app.use((req, res, next) => {
  console.log('Middleware d\'aplicació');
  next();
});

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().

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

Middleware de Tercers

Hi ha molts middleware de tercers disponibles. Per exemple, morgan per registrar peticions HTTP.

const morgan = require('morgan');
app.use(morgan('dev'));

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

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