Menu
CoddyTech

중첩 라우트

Coddy Node.js 여정의 Express 기초 섹션에 포함된 레슨. 20개 중 17번째.

리뷰는 하나의 레시피에 속하므로 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은 앱에 속하므로, 라우터를 mergeParams: true로 만들지 않으면 라우터 내부에서는 undefined입니다.

routes/reviews.js가 준비되어 있으며, reviews 객체와 hasRecipe(id) 헬퍼가 있습니다.

challenge icon

챌린지

쉬움
  • GET /api/recipes/:id/reviews는 해당 레시피의 리뷰를 반환하며, 처음에는 []를 반환합니다.
  • { "stars", "text" }를 포함한 POST 요청은 리뷰 하나를 추가하고, 해당 리뷰와 함께 201을 반환합니다.
  • 존재하지 않는 레시피의 경우: { "error": "No such recipe" }와 함께 404를 반환합니다.

레시피 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 기초의 모든 레슨