Express Router
CoddyのNode.jsジャーニー「Expressの基礎」セクションの一部。レッスン 16/20。
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というルートが1つあります。
チャレンジ
簡単/api/recipesの4つのルートをserver.jsからroutes/recipes.jsに移動し、/tagsの下に配置します。- ルーターを
/api/recipesにマウントします。
GET /api/recipes/tags、GET /api/recipes/2、およびGET /api/recipes/2/scale?by=lotsを送信します。
自分で試してみよう
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 の下)に移動する。
// ルーター内のパスは、ルーターがマウントされた場所からの相対パスになる。
export default router;
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。