Parte 2: Introduzione ai Middleware

Benvenuti alla nostra lezione su middleware in Node.js utilizzando il framework Express.

I middleware sono funzioni che hanno accesso agli oggetti di richiesta (request), risposta (response), e alla prossima funzione middleware nel ciclo di richiesta-risposta dell'applicazione. Sono uno strumento essenziale per effettuare il preprocessing delle richieste, gestire le risposte, e organizzare il codice in maniera modulare.

Cosa è un Middleware?

Un middleware è una funzione che viene eseguita tra la ricezione della richiesta e l'invio della risposta nel tuo application server. Questi possono eseguire le seguenti operazioni:

  • Eseguire qualsiasi codice.

  • Modificare gli oggetti di richiesta e risposta.

  • Terminare il ciclo di richiesta-risposta.

  • Chiamare il prossimo middleware nella pila.

Se il middleware non termina il ciclo di richiesta-risposta, deve chiamare next() per passare il controllo al prossimo middleware, altrimenti la richiesta rimarrà sospesa.

Implementare Middleware Base in Express

Express è un framework che rende molto semplice implementare middleware. Qui vediamo come aggiungere un middleware semplice che registra la data e l'ora di ogni richiesta.

  1. Crea un file app.js: Inizia creando un nuovo progetto Express se non l'hai già fatto:

    mkdir mioProgettoExpress
    cd mioProgettoExpress
    npm init -y
    npm install express
    touch app.js
  2. Aggiungi il Middleware per il Logging: Nel file app.js, configura il tuo server Express e aggiungi un middleware che stampa la data e l'ora attuali:

    const express = require('express');
    const app = express();
    const port = 3000;
    
    // Middleware che logga la data e l'ora delle richieste
    app.use((req, res, next) => {
      console.log('Time:', Date.now());
      next();
    });
    
    app.get('/', (req, res) => {
      res.send('Home Page');
    });
    
    app.get('/about', (req, res) => {
      res.send('About Page');
    });
    
    app.listen(port, () => {
      console.log(`Server running on http://localhost:${port}`);
    });

Middleware per la Gestione degli Errori

I middleware non sono utili solo per loggare o modificare le richieste; possono anche gestire gli errori. Express ha una particolarità: i middleware che gestiscono gli errori hanno quattro argomenti invece di tre. L'argomento aggiuntivo è l'errore che viene passato.

// Middleware per la gestione degli errori
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

Esercizio: Creazione di Middleware Personalizzato

Prova a creare un middleware che controlla se una richiesta contiene un certo header, e se non è presente, invia una risposta con status 400 (Bad Request). Questo esercizio ti aiuterà a comprendere come i middleware possono essere usati per validare le richieste in ingresso.

app.use((req, res, next) => {
  if (!req.headers['x-custom-header']) {
    res.status(400).send('Bad Request: Missing x-custom-header');
  } else {
    next();
  }
});

Conclusione

Con questa lezione, hai imparato cos'è un middleware, come implementarlo in un'applicazione Express, e come può essere utilizzato per migliorare la gestione delle richieste e delle risposte. I middleware sono potenti strumenti per costruire applicazioni web robuste e sicure.

Continua a esplorare e a sperimentare con i middleware in Express per scoprire come possono migliorare ulteriormente le tue applicazioni!

Last updated