Menu
CoddyTech

Вложенные маршруты

Часть раздела Основы Express путешествия по Node.js на Coddy. Урок 17 из 20.

Отзывы относятся к одному рецепту, поэтому их URL находятся внутри его пути: /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);

В req.params маршрутизатора хранятся только параметры его собственных путей. :isbn в пути монтирования относится к приложению, поэтому внутри маршрутизатора он имеет значение undefined, если только маршрутизатор не создан с параметром mergeParams: true.

Файл routes/reviews.js готов: в нём есть объект reviews и вспомогательная функция hasRecipe(id).

challenge icon

Задание

Легко
  • GET /api/recipes/:id/reviews возвращает отзывы к этому рецепту; сначала это [].
  • Запрос POST с { "stars", "text" } добавляет отзыв и возвращает его с кодом 201.
  • Для неизвестного рецепта возвращается 404 с { "error": "No such recipe" }.

Оставь отзыв о рецепте 1, затем отправь запросы GET /api/recipes/1/reviews и GET /api/recipes/99/reviews.

Попробуйте сами

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

// Отзывы по id рецепта, например { 1: [{ stars: 5, text: 'Lovely' }] }.
const reviews = {};

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

const router = express.Router();

// GET / выводит список отзывов о рецепте. POST / добавляет отзыв.

export default router;

Все уроки раздела Основы Express