Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Creazione di Middleware Personalizzati | Sviluppo di Applicazioni Web con Express.js
Sviluppo Backend con Node.js ed Express.js

Creazione di Middleware Personalizzati

Scorri per mostrare il menu

In Express.js, è possibile creare funzioni middleware personalizzate utilizzando il metodo app.use(). Queste funzioni accettano tre parametri: req (l'oggetto richiesta), res (l'oggetto risposta) e next (una funzione per passare il controllo al middleware successivo nella catena). I middleware personalizzati possono essere applicati globalmente a tutte le rotte oppure a rotte specifiche specificando un percorso di rotta.

Creazione di Middleware Personalizzati

Ecco un esempio di base di una funzione middleware personalizzata che registra il timestamp e l'URL di ogni richiesta in arrivo:

app.use((req, res, next) => {
  const timestamp = new Date().toISOString();
  const url = req.url;
  
  console.log(`[${timestamp}] ${url}`);
  
  next(); // Pass control to the next middleware.
});

In questo esempio, il middleware personalizzato registra il timestamp e l'URL di ogni richiesta in arrivo nella console. La funzione next() viene chiamata per passare il controllo al middleware successivo nella pipeline.

Esempio Reale: Combinazione di Middleware Integrati e Personalizzati

Ecco un esempio pratico in cui viene utilizzato un middleware integrato di Express per analizzare i dati JSON e successivamente viene creato un middleware personalizzato per validare tali dati prima di procedere:

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

// Use built-in middleware to parse JSON data.
app.use(express.json());

// Custom middleware to validate JSON data.
app.use((req, res, next) => {
  const jsonData = req.body;

  if (!jsonData || Object.keys(jsonData).length === 0) {
    // If the JSON data is missing or empty, send an error response.
    return res.status(400).json({ error: 'Invalid JSON data' });
  }

  // Data is valid; proceed to the next middleware or route.
  next();
});

// Route that expects valid JSON data.
app.post('/api/data', (req, res) => {
  const jsonData = req.body;
  res.status(200).json({ message: 'Data received', data: jsonData });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000.');
});

In questo esempio:

  • Viene utilizzato il middleware integrato express.json() per analizzare i dati JSON in ingresso;
  • Viene creato un middleware personalizzato che verifica se i dati JSON analizzati sono assenti o vuoti. In tal caso, viene inviata una risposta di errore 400 Bad Request con un messaggio di errore. Se i dati sono validi, viene chiamata la funzione next() per procedere alla rotta;
  • La rotta /api/data si aspetta dati JSON validi. Se il middleware personalizzato valida i dati, il gestore della rotta li riceve e invia una risposta di successo.
Descrizione del codice
expand arrow
  • Riga 1: importa il framework Express.js;

  • Riga 2: crea un'istanza dell'applicazione Express chiamando express(). L'oggetto app risultante viene utilizzato per definire le rotte, i middleware e gestire le richieste HTTP;

  • Riga 5: abilita il middleware integrato express.json(). Questo middleware analizza automaticamente i corpi delle richieste JSON in ingresso e rende i dati disponibili tramite req.body;

  • Righe 8-18: definiscono un middleware personalizzato utilizzato per validare i dati JSON in ingresso;

  • verifica se req.body contiene dati;

  • restituisce una risposta 400 Bad Request se il corpo della richiesta è mancante o vuoto;

  • chiama next() se i dati JSON sono validi e continua con il middleware o gestore di rotta successivo;

  • Righe 21-24: definiscono una rotta POST su /api/data;

  • recupera i dati JSON inviati da req.body;

  • restituisce una risposta 200 OK contenente un messaggio di conferma e i dati ricevuti;

  • Righe 26-28: avviano l'applicazione Express e iniziano ad ascoltare le richieste sulla porta 3000.

Questo esempio dimostra come sia possibile utilizzare sia middleware integrati che personalizzati per validare i dati prima che raggiungano i gestori delle rotte, assicurando che i dati siano nel formato previsto prima di elaborarli ulteriormente.

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 9

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 3. Capitolo 9
some-alt