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.
Aufgabe
Einfachserver.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.
- Füge in
routes/recipes.jsunterhalb der/tags-Route die vier API-Routen ausserver.jshinzu: 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/recipesjedes Pfads weg: Aus/api/recipes/:idwird/:id, und aus der Liste wird/. - Lasse sie unterhalb von
/tags. Express versucht die Routen der Reihe nach, und ein vorangestelltes/:idwürde/tagsabfangen und nach einem Rezept suchen, dessen IDtagslautet. - Lösche diese vier Routen aus
server.js. - Importiere in
server.jsden Router aus./routes/recipes.jsund hänge ihn mitapp.useunter/api/recipesein, und zwar an der Stelle, an der die vier Routen waren: nachexpress.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;
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