Router Express
Część sekcji Podstawy Express ścieżki Node.js w Coddy. Lekcja 19 z 23.
Plik server.js zawiera teraz strony, trasy API i middleware, a jego zawartość stale się rozrasta.
// 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() tworzy małą aplikację z własnymi trasami, umieszczonymi w osobnym pliku. app.use('/api/books', booksRouter) ją montuje: router odpowiada na GET /api/books za pomocą /, a na GET /api/books/9780141439518 za pomocą /:isbn. Prefiks zapisuje się raz, w app.use. Błędy zgłoszone wewnątrz routera nadal trafiają do procedury obsługi błędów aplikacji.
Nowy plik routes/recipes.js ma już jedną trasę: /tags.
Wyzwanie
Łatwyserver.js wciąż się rozrasta. Przenieś API przepisów do osobnego pliku routes/recipes.js, w którym jest już trasa wyświetlająca wszystkie tagi.
- W
routes/recipes.js, poniżej trasy/tags, dodaj cztery trasy API zserver.js: listę, pojedynczy przepis według id, trasę POST dodającą przepis oraz trasę skalowania. W routerze pomiń część/api/recipeskażdej ścieżki:/api/recipes/:idzmienia się w/:id, a lista w/. - Umieść je poniżej
/tags. Express sprawdza trasy po kolei, a/:idumieszczone jako pierwsze przechwyciłoby/tagsi wyszukiwałoby przepis o idtags. - Usuń te cztery trasy z
server.js. - W
server.jszaimportuj router z./routes/recipes.jsi zamontuj go pod adresem/api/recipesza pomocąapp.use, w miejscu, w którym znajdowały się cztery trasy: poexpress.json()i przed obsługą błędu 404.
Wypróbuj: Naciśnij „Uruchom” i wyślij żądanie do /api/recipes/tags. Powinien pojawić się wynik ["breakfast","dinner","soup","sweet","vegan"]. Wyślij żądanie do /api/recipes/2: przepis Pancakes, tak jak wcześniej. Wyślij żądanie POST z treścią {"title": "Toast"} do /api/recipes: status 201. Następnie wyślij żądanie do /api/recipes/5/scale?by=2: status 500 i {"error":"Something went wrong"}, co oznacza, że błędy zgłoszone wewnątrz routera nadal trafiają do obsługi błędów. Adresy URL się nie zmieniły — zmieniło się tylko miejsce, w którym znajduje się kod.
Spróbuj swoich sił
import express from 'express';
import { recipes } from '../data.js';
const router = express.Router();
// Każdy tag po jednym razie, w kolejności alfabetycznej.
router.get('/tags', (req, res) => {
const tags = new Set(recipes.flatMap((recipe) => recipe.tags));
res.json([...tags].sort());
});
// Przenieś trasy /api/recipes z server.js tutaj, poniżej /tags.
// W routerze ścieżki są względne względem miejsca, w którym jest on zamontowany.
export default router;
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy Express
Poćwicz samodzielnie: Edytor online Express