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/datasi aspetta dati JSON validi. Se il middleware personalizzato valida i dati, il gestore della rotta li riceve e invia una risposta di successo.
-
Riga 1: importa il framework Express.js;
-
Riga 2: crea un'istanza dell'applicazione Express chiamando
express(). L'oggettoapprisultante 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 tramitereq.body; -
Righe 8-18: definiscono un middleware personalizzato utilizzato per validare i dati JSON in ingresso;
-
verifica se
req.bodycontiene dati; -
restituisce una risposta
400 Bad Requestse 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
POSTsu/api/data; -
recupera i dati JSON inviati da
req.body; -
restituisce una risposta
200 OKcontenente 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.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione