Federico Lelli / SchoolNode.js & Express
LEZIONE 20 · Express e API

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
find restituisce il primo elemento che soddisfa una condizione; se nessuno la soddisfa restituisce undefined.
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.

Torna all’indice ↑

Materiali didattici curati e rielaborati da Federico Lelli. Le fonti e i riferimenti specifici sono indicati nei materiali disponibili.