Menu
CoddyTech

Verschachtelte Routen

Teil des Abschnitts Express-Grundlagen der Node.js-Journey von Coddy. Lektion 17 von 20.

Bewertungen gehören zu einem Rezept, daher liegen ihre URLs darunter: /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);

Das req.params eines Routers enthält nur die Parameter seiner eigenen Pfade. Das :isbn im Mount-Pfad gehört zur App, daher ist es innerhalb des Routers undefined, sofern der Router nicht mit mergeParams: true erstellt wurde.

routes/reviews.js ist bereit und enthält ein reviews-Objekt sowie einen hasRecipe(id)-Hilfsfunktion.

challenge icon

Aufgabe

Einfach
  • GET /api/recipes/:id/reviews gibt die Bewertungen des Rezepts zurück, zunächst [].
  • POST mit { "stars", "text" } fügt eine Bewertung hinzu und gibt sie mit 201 zurück.
  • Unbekanntes Rezept: 404 mit { "error": "No such recipe" }.

Veröffentliche eine Bewertung für Rezept 1 und sende anschließend GET /api/recipes/1/reviews und GET /api/recipes/99/reviews.

Probier es selbst

import express from 'express';
import { recipes } from '../data.js';

// Bewertungen nach Rezept-id, zum Beispiel { 1: [{ stars: 5, text: 'Lovely' }] }.
const reviews = {};

const hasRecipe = (id) => recipes.some((recipe) => recipe.id === Number(id));

const router = express.Router();

// GET / listet die Bewertungen eines Rezepts auf. POST / fügt eine hinzu.

export default router;

Alle Lektionen in Express-Grundlagen