Menu
CoddyTech

Express Router

Teil des Abschnitts Express-Grundlagen der Node.js-Journey von Coddy. Lektion 19 von 23.

server.js enthält jetzt Seiten, API-Routen und Middleware und wächst weiter.

// 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() erstellt eine kleine App mit eigenen Routen, die in einer eigenen Datei abgelegt sind. app.use('/api/books', booksRouter) bindet sie ein: Der / des Routers beantwortet GET /api/books, und sein /:isbn beantwortet GET /api/books/9780141439518. Das Präfix wird nur einmal in app.use angegeben. Fehler, die innerhalb eines Routers ausgelöst werden, erreichen weiterhin den Fehler-Handler der App.

Die neue Datei routes/recipes.js enthält bereits eine Route, /tags.

challenge icon

Aufgabe

Einfach

server.js wird immer länger. Verschiebe die Rezept-API in eine eigene Datei, routes/recipes.js, die bereits eine Route enthält, die alle Tags auflistet.

  1. Füge in routes/recipes.js unterhalb der /tags-Route die vier API-Routen aus server.js hinzu: die Liste, ein Rezept anhand seiner ID, den POST-Aufruf, der ein Rezept hinzufügt, und die Skalierungsroute. Lasse innerhalb eines Routers den Teil /api/recipes jedes Pfads weg: Aus /api/recipes/:id wird /:id, und aus der Liste wird /.
  2. Lasse sie unterhalb von /tags. Express versucht die Routen der Reihe nach, und ein vorangestelltes /:id würde /tags abfangen und nach einem Rezept suchen, dessen ID tags lautet.
  3. Lösche diese vier Routen aus server.js.
  4. Importiere in server.js den Router aus ./routes/recipes.js und hänge ihn mit app.use unter /api/recipes ein, und zwar an der Stelle, an der die vier Routen waren: nach express.json() und vor dem 404-Handler.

Probiere es aus: Drücke auf „Spielen“ und rufe /api/recipes/tags auf. Du solltest ["breakfast","dinner","soup","sweet","vegan"] sehen. Rufe /api/recipes/2 auf: das Pancakes-Rezept wie zuvor. Sende {"title": "Toast"} per POST an /api/recipes: Status 201. Rufe dann /api/recipes/5/scale?by=2 auf: Status 500 und {"error":"Something went wrong"}, sodass Fehler, die innerhalb des Routers ausgelöst werden, weiterhin deinen Fehler-Handler erreichen. Die URLs haben sich nicht geändert, nur der Speicherort des Codes.

Probier es selbst

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

const router = express.Router();

// Jedes Tag genau einmal, in alphabetischer Reihenfolge.
router.get('/tags', (req, res) => {
    const tags = new Set(recipes.flatMap((recipe) => recipe.tags));
    res.json([...tags].sort());
});

// Verschiebe die /api/recipes-Routen aus server.js hierher, unterhalb von /tags.
// Innerhalb eines Routers sind Pfade relativ zu der Stelle, an der er eingebunden ist.

export default router;
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Express-Grundlagen

Übe selbstständig: Express-Playground