Parametri di Routing in Express.js: Guida Completa
I parametri di routing in Express.js sono una funzionalità potente che consente di creare percorsi dinamici e flessibili all’interno delle applicazioni web. Essi permettono di definire URL che contengono variabili, rendendo possibile l’accesso a risorse specifiche o la gestione di operazioni basate sui dati forniti nell’URL. In questa guida, esploreremo come utilizzare i parametri di routing, le differenze tra i vari tipi di parametri (route parameters, query string e body parameters), e come gestirli efficacemente nelle tue applicazioni.
Cos’è il Routing in Express.js?
Il routing in Express.js è il processo di definizione dei percorsi (o endpoint) che un’applicazione può gestire. Un percorso specifica un URL e un metodo HTTP (GET, POST, PUT, DELETE, ecc.), e viene associato a una funzione che viene eseguita quando quel percorso viene richiesto.
Esempio di Routing di Base
const express = require("express");
const app = express();
app.get("/users", (req, res) => {
res.send("Lista di utenti");
});
app.listen(3000, () => {
console.log("Server in ascolto sulla porta 3000");
});
Parametri di Route
I parametri di route sono parti variabili di un percorso che possono essere utilizzate per catturare i valori dinamici inseriti nell’URL. Vengono definiti utilizzando i due punti (:
) prima del nome del parametro all’interno della definizione del percorso.
Esempio di Parametri di Route
app.get("/users/:id", (req, res) => {
const userId = req.params.id;
res.send(`Utente con ID: ${userId}`);
});
In questo esempio, se un client richiede l’URL /users/42
, il valore 42
verrà catturato come id
e sarà accessibile tramite req.params.id
.
Utilizzo di Più Parametri di Route
Puoi definire più parametri di route in un singolo percorso:
app.get("/users/:userId/posts/:postId", (req, res) => {
const { userId, postId } = req.params;
res.send(`Post ${postId} dell'utente ${userId}`);
});
In questo caso, l’URL /users/42/posts/101
catturerà 42
come userId
e 101
come postId
.
Parametri di Route Opzionali
Express permette di definire parametri di route opzionali aggiungendo un punto interrogativo (?
) dopo il nome del parametro:
app.get("/users/:id?", (req, res) => {
if (req.params.id) {
res.send(`Utente con ID: ${req.params.id}`);
} else {
res.send("Nessun ID utente fornito");
}
});
Query String Parameters
I query string parameters sono parametri che vengono aggiunti all’URL dopo un punto interrogativo (?
). Sono utilizzati per passare dati che non fanno parte del percorso ma che devono essere considerati dal server.
Esempio di Query String Parameters
app.get("/search", (req, res) => {
const { query, page } = req.query;
res.send(`Ricerca per "${query}" nella pagina ${page}`);
});
Se un client richiede l’URL /search?query=express&page=2
, req.query.query
sarà express
e req.query.page
sarà 2
.
Body Parameters
I body parameters sono dati che vengono inviati nel corpo della richiesta, generalmente utilizzati nei metodi POST, PUT, e PATCH. Per accedere ai body parameters, è necessario utilizzare un middleware come express.json()
o express.urlencoded()
.
Esempio di Body Parameters con JSON
app.use(express.json());
app.post("/users", (req, res) => {
const { name, email } = req.body;
res.send(`Creazione di un nuovo utente con nome: ${name} e email: ${email}`);
});
In questo esempio, i dati inviati come JSON nel corpo della richiesta POST sono accessibili tramite req.body.name
e req.body.email
.
Differenze tra Route, Query String e Body Parameters
-
Route Parameters: Parte dell’URL che definisce una risorsa specifica o una variabile di percorso. Utilizzati per identificare risorse specifiche, ad esempio
/users/:id
. -
Query String Parameters: Parametri aggiunti all’URL dopo un punto interrogativo, utilizzati per passare dati addizionali come opzioni di filtro, ad esempio
/search?query=express&page=2
. -
Body Parameters: Dati inviati nel corpo della richiesta, utilizzati principalmente con metodi come POST per trasmettere informazioni strutturate come JSON.
Validazione e Sicurezza dei Parametri
È importante validare e sanificare tutti i parametri per prevenire vulnerabilità come l’injection di SQL o altri tipi di attacchi.
Esempio di Validazione con express-validator
npm install express-validator --save
const { check, validationResult } = require("express-validator");
app.post(
"/users",
[check("email").isEmail(), check("name").not().isEmpty().trim().escape()],
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
res.send("Dati utente validi");
}
);
In questo esempio, express-validator
viene utilizzato per verificare che email
sia un indirizzo email valido e che name
non sia vuoto.
Best Practices per l’Uso dei Parametri di Routing
-
Usa i Parametri di Route per Identificare Risorse: Utilizza i parametri di route per identificare risorse specifiche come utenti, prodotti, o post.
-
Utilizza i Query Parameters per Filtri e Opzioni: Riserva i query parameters per opzioni che modificano il comportamento di una richiesta, come paginazione, filtri o ordinamento.
-
Valida Tutti i Parametri: Implementa sempre la validazione e la sanificazione dei parametri per garantire la sicurezza dell’applicazione.
-
Mantieni il Routing Chiaro e Semplice: Progetta percorsi logici e comprensibili, seguendo una struttura gerarchica che rappresenti chiaramente le risorse e le operazioni.
-
Documenta le API: Fornisci una documentazione chiara per le tue API, specificando come utilizzare i parametri di route, query e body per evitare fraintendimenti e garantire un uso corretto da parte degli sviluppatori.
Conclusione
I parametri di routing in Express.js offrono un modo flessibile per gestire percorsi dinamici e raccogliere dati dalle richieste degli utenti. Comprendere come utilizzare e combinare route parameters, query string parameters e body parameters è essenziale per costruire API e applicazioni web potenti ed efficienti. Seguendo le best practices delineate in questa guida, puoi garantire che le tue applicazioni siano sicure, scalabili e facili da manutenere.