Menu
CoddyTech

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

challenge icon

Sfida

Facile
  • GET /api/recipes/:id/reviews restituisce le recensioni di quella ricetta, inizialmente [].
  • POST con { "stars", "text" } ne aggiunge una e la restituisce con 201.
  • Ricetta sconosciuta: 404 con { "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;

Tutte le lezioni di Fondamenti di Express