Menu
CoddyTech

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.

challenge icon

Wyzwanie

Łatwy

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

  1. W routes/recipes.js, poniżej trasy /tags, dodaj cztery trasy API z server.js: listę, pojedynczy przepis według id, trasę POST dodającą przepis oraz trasę skalowania. W routerze pomiń część /api/recipes każdej ścieżki: /api/recipes/:id zmienia się w /:id, a lista w /.
  2. Umieść je poniżej /tags. Express sprawdza trasy po kolei, a /:id umieszczone jako pierwsze przechwyciłoby /tags i wyszukiwałoby przepis o id tags.
  3. Usuń te cztery trasy z server.js.
  4. W server.js zaimportuj router z ./routes/recipes.js i zamontuj go pod adresem /api/recipes za pomocą app.use, w miejscu, w którym znajdowały się cztery trasy: po express.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;
quiz iconSprawdź się

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