Menu
CoddyTech

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.

challenge icon

Sfida

Facile

server.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.

  1. In routes/recipes.js, sotto la route /tags, aggiungi le quattro route API da server.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/:id diventa /:id e l’elenco diventa /.
  2. Lasciale sotto /tags. Express prova le route in ordine e /:id, se posizionata per prima, intercetterebbe /tags e cercherebbe una ricetta con id tags.
  3. Elimina quelle quattro route da server.js.
  4. In server.js, importa il router da ./routes/recipes.js e montalo su /api/recipes con app.use, nella posizione in cui si trovavano le quattro route: dopo express.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;
quiz iconMettiti alla prova

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