Express 라우터
Coddy Node.js 여정의 Express 기초 섹션에 포함된 레슨. 23개 중 19번째.
server.js에는 이제 페이지, API 경로, 미들웨어가 들어 있으며, 계속 늘어나고 있습니다.
// 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()는 자체 경로를 가진 작은 앱을 만들어 별도의 파일에 보관합니다. app.use('/api/books', booksRouter)는 이를 마운트합니다. 라우터의 /는 GET /api/books에 응답하고, /:isbn은 GET /api/books/9780141439518에 응답합니다. 접두사는 app.use에 한 번만 작성합니다. 라우터 내부에서 발생한 오류도 앱의 오류 처리기에 전달됩니다.
새 파일 routes/recipes.js에는 이미 /tags 경로가 하나 있습니다.
챌린지
쉬움server.js가 계속 커지고 있습니다. 레시피 API를 이미 모든 태그를 나열하는 경로가 있는 별도의 파일 routes/recipes.js로 옮기세요.
routes/recipes.js에서/tags경로 아래에server.js의 API 경로 네 개를 추가하세요. 목록, id로 레시피 하나를 찾는 경로, 레시피를 추가하는 POST 경로, 그리고 분량 조정 경로입니다. 라우터 안에서는 각 경로에서/api/recipes부분을 빼세요./api/recipes/:id는/:id가 되고, 목록 경로는/가 됩니다.- 경로 네 개를
/tags아래에 두세요. Express는 경로를 순서대로 확인하므로,/:id를 맨 앞에 두면/tags와 일치해 id가tags인 레시피를 찾게 됩니다. server.js에서 해당 경로 네 개를 삭제하세요.server.js에서./routes/recipes.js의 라우터를 가져오고,express.json()다음이자 404 처리기 이전, 기존에 경로 네 개가 있던 위치에서app.use로/api/recipes에 마운트하세요.
직접 해보기: ‘실행’을 누르고 /api/recipes/tags를 요청하세요. ["breakfast","dinner","soup","sweet","vegan"]가 표시되어야 합니다. /api/recipes/2를 요청하면 이전과 마찬가지로 Pancakes 레시피가 반환됩니다. {"title": "Toast"}를 /api/recipes에 POST로 보내면 상태 코드 201이 반환됩니다. 그런 다음 /api/recipes/5/scale?by=2를 보내면 상태 코드 500과 {"error":"Something went wrong"}가 반환됩니다. 이는 라우터 안에서 발생한 오류도 여전히 오류 처리기에 전달된다는 뜻입니다. URL은 바뀌지 않았고, 코드가 있는 위치만 바뀌었습니다.
직접 해보기
import express from 'express';
import { recipes } from '../data.js';
const router = express.Router();
// 모든 태그를 알파벳 순서로 한 번씩.
router.get('/tags', (req, res) => {
const tags = new Set(recipes.flatMap((recipe) => recipe.tags));
res.json([...tags].sort());
});
// /api/recipes 라우트를 server.js에서 여기 /tags 아래로 옮기세요.
// router 내부에서 경로는 router가 마운트된 위치를 기준으로 합니다.
export default router;
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Express 기초의 모든 레슨
직접 연습해 보세요: Express 플레이그라운드