Route annidate
Fa parte della sezione Fondamenti di Express del percorso Node.js di Coddy. Lezione 17 di 20.
Le recensioni appartengono a una ricetta, quindi i loro URL si trovano al suo interno: /api/recipes/2/reviews.
const chapters = express.Router({ mergeParams: true });
chapters.get('/', (req, res) => {
res.json(chaptersOf(req.params.isbn));
});
app.use('/api/books/:isbn/chapters', chapters);Il req.params di un router contiene solo i parametri dei suoi percorsi. :isbn nel percorso di mount appartiene all'app, quindi all'interno del router è undefined, a meno che il router non venga creato con mergeParams: true.
routes/reviews.js è pronto, con un oggetto reviews e una funzione helper hasRecipe(id).
Sfida
FacileGET /api/recipes/:id/reviewsrestituisce le recensioni di quella ricetta, inizialmente[].POSTcon{ "stars", "text" }ne aggiunge una e la restituisce con201.- Ricetta sconosciuta:
404con{ "error": "No such recipe" }.
Pubblica una recensione per la ricetta 1, poi invia GET /api/recipes/1/reviews e GET /api/recipes/99/reviews.
Provalo tu
import express from 'express';
import { recipes } from '../data.js';
// Recensioni per id della ricetta, ad esempio { 1: [{ stars: 5, text: 'Lovely' }] }.
const reviews = {};
const hasRecipe = (id) => recipes.some((recipe) => recipe.id === Number(id));
const router = express.Router();
// GET / elenca le recensioni di una ricetta. POST / ne aggiunge una.
export default router;