Parametri della route
Prima di iniziare: le parole della lezione
- Parametro di percorso e ID
- Un parametro di percorso è un segmento variabile della route. Un ID è un identificatore della risorsa: può essere numerico oppure una stringa, secondo il modello dati.
- find e valore assente
findrestituisce il primo elemento che soddisfa una condizione; se nessuno la soddisfa restituisceundefined.- Conversione e intero sicuro
- La conversione cambia il tipo di un valore. Un intero sicuro è rappresentabile senza perdita di precisione nel formato Number di JavaScript.
I parametri della route identificano una risorsa all'interno dell'URL. Nel percorso /api/persone/:id, il segmento :id è letto da req.params.id.
const persone = [{ id: 1, nome: 'Anna' }, { id: 2, nome: 'Luca' }];
app.get('/api/persone/:id', (req, res) => {
const id = Number(req.params.id);
if (!Number.isInteger(id)) return res.status(400).json({ errore: 'ID non valido' });
const persona = persone.find(p => p.id === id);
if (!persona) return res.status(404).json({ errore: 'Non trovata' });
res.json(persona);
});
Esempio aggiuntivo: /api/persone/2 restituisce Luca; /api/persone/abc restituisce 400, mentre /api/persone/999 restituisce 404.
Chi fa cosa, e perché
Express riempie req.params usando i nomi preceduti da due punti. In /articoli/:categoria/:id puoi leggere req.params.categoria e req.params.id. La forma const { id } = req.params è destructuring, non una richiesta al database.
Se gli ID dell’array sono numeri, confrontare p.id === req.params.id fallisce perché "2" è una stringa. Convertire e validare risolve il problema. Non convertire però un ID testuale, per esempio un UUID, come se fosse numerico. Distingui ID scritto male (400) e ID valido che non esiste (404).
Un altro esempio guidato
// Frammento da inserire in un'app Express
app.get('/articoli/:categoria/:id', (req, res) => {
const { categoria, id: testoId } = req.params;
const id = Number(testoId);
if (!/^[1-9]\d*$/.test(testoId) || !Number.isSafeInteger(id)) {
return res.status(400).json({ errore: 'ID numerico positivo richiesto' });
}
res.json({ categoria, id });
});
Come leggerlo e risultato atteso. /articoli/node/12 restituisce categoria node e ID numerico 12. L’espressione regolare controlla che la stringa contenga solo cifre e inizi da 1 a 9; isSafeInteger controlla il numero. Questo endpoint dimostra il parsing e non verifica l’esistenza di un articolo.
Prova tu. Prova 12, abc, 0 e 1e2. Spiega perché il controllo numerico e la ricerca della risorsa rispondono a due domande diverse.