Express Router
Fa parte della sezione Fondamenti di Express del percorso Node.js di Coddy. Lezione 19 di 23.
server.js ora contiene pagine, route API e middleware, e continua a crescere.
// routes/books.js
const router = express.Router();
router.get('/', (req, res) => res.json(books));
router.get('/:isbn', (req, res) => res.json(findBook(req.params.isbn)));
export default router;
// server.js
app.use('/api/books', booksRouter);express.Router() crea una piccola app con route proprie, contenute nel proprio file. app.use('/api/books', booksRouter) la monta: la / del router risponde a GET /api/books, e la sua /:isbn risponde a GET /api/books/9780141439518. Il prefisso si scrive una sola volta, in app.use. Gli errori generati all'interno di un router raggiungono comunque il gestore degli errori dell'app.
Il nuovo file routes/recipes.js contiene già una route, /tags.
Sfida
Facileserver.js continua a crescere. Sposta l’API delle ricette in un file dedicato, routes/recipes.js, che contiene già una route che elenca tutti i tag.
- In
routes/recipes.js, sotto la route/tags, aggiungi le quattro route API daserver.js: l’elenco, una ricetta tramite id, la POST che aggiunge una ricetta e la route per ridimensionare. All’interno di un router, ometti da ogni percorso la parte/api/recipes:/api/recipes/:iddiventa/:ide l’elenco diventa/. - Lasciale sotto
/tags. Express prova le route in ordine e/:id, se posizionata per prima, intercetterebbe/tagse cercherebbe una ricetta con idtags. - Elimina quelle quattro route da
server.js. - In
server.js, importa il router da./routes/recipes.jse montalo su/api/recipesconapp.use, nella posizione in cui si trovavano le quattro route: dopoexpress.json()e prima del gestore 404.
Prova: premi «Run» e invia /api/recipes/tags. Dovresti vedere ["breakfast","dinner","soup","sweet","vegan"]. Invia /api/recipes/2: la ricetta Pancakes, come prima. Invia con POST {"title": "Toast"} a /api/recipes: stato 201. Poi invia /api/recipes/5/scale?by=2: stato 500 e {"error":"Something went wrong"}, così gli errori generati all’interno del router raggiungono comunque il gestore degli errori. Gli URL non sono cambiati; è cambiata solo la posizione del codice.
Provalo tu
import express from 'express';
import { recipes } from '../data.js';
const router = express.Router();
// Ogni tag, una sola volta, in ordine alfabetico.
router.get('/tags', (req, res) => {
const tags = new Set(recipes.flatMap((recipe) => recipe.tags));
res.json([...tags].sort());
});
// Sposta qui le route /api/recipes da server.js, sotto /tags.
// All'interno di un router, i percorsi sono relativi al punto in cui è montato.
export default router;
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti di Express
Esercitati da solo: Playground Express