Menu
CoddyTech

라우트 매개변수

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

레시피 상자에는 많은 레시피가 들어갈 것이므로, 레시피마다 경로를 하나씩 만들면 끝이 없습니다.

app.get('/weather/:city', (req, res) => {
    res.send('Forecast for ' + req.params.city);
});

콜론으로 시작하는 경로 부분은 경로 매개변수입니다. 어떤 값이든 일치하며, Express는 그 값을 req.params에 넣습니다. GET /weather/oslo는 Forecast for oslo를 보냅니다.

매개변수는 항상 문자열입니다. GET /rooms/12는 '12'를 반환하며, '12' === 12는 false이므로 숫자와 비교하기 전에 Number(...)로 변환하세요.

요청한 항목이 존재하지 않으면 상태 코드 404로 응답하세요. res.status(404).send('No such city')는 상태를 설정한 다음 응답을 보냅니다.

challenge icon

챌린지

쉬움

각 레시피는 고유한 페이지를 가지며, 경로에 해당 레시피의 id가 포함됩니다. /recipes/1, /recipes/2 등이 있습니다.

  1. server.js에서 /recipes/:id 경로를 하나 추가하세요. 경로에 있는 id와 일치하는 id를 가진 레시피를 recipes(data.js에 있음)에서 찾습니다. 해당 레시피의 제목만 텍스트로 전송합니다. /recipes/2는 Pancakes를 전송합니다.
  2. 경로에 있는 id는 문자열이고 data.js의 id는 숫자이므로, 비교하기 전에 변환하세요.
  3. 해당 id를 가진 레시피가 없으면 상태를 404로 설정하고 텍스트 No such recipe를 전송하세요.

해보기: ‘플레이’를 누르고 /recipes/2를 전송하세요. 상태 200과 함께 Pancakes가 표시되어야 합니다. /recipes/4를 전송하세요: Fish & Chips. /recipes/99를 전송하세요: 상태 404와 함께 No such recipe가 표시됩니다.

직접 해보기

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

const app = express();

app.get('/', (req, res) => {
    res.send('Welcome to Recipe Box');
});

// type('text')는 일반 텍스트를 전송하므로 각 제목이 한 줄씩 표시됩니다.
app.get('/recipes', (req, res) => {
    res.type('text').send(recipes.map((recipe) => recipe.title).join('\n'));
});

app.get('/about', (req, res) => {
    res.send('Recipe Box collects family recipes.');
});

app.listen(3000, () => {
    console.log('Recipe Box is running on port 3000');
});
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Express 기초의 모든 레슨

직접 연습해 보세요: Express 플레이그라운드