Маршрутизатор Express
Часть раздела Основы Express путешествия по Node.js на Coddy. Урок 19 из 23.
Теперь в 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, добавь четыре маршрута API изserver.js: список, один рецепт по id, POST-запрос для добавления рецепта и маршрут масштабирования. Внутри маршрутизатора убери из каждого пути часть/api/recipes:/api/recipes/:idстановится/:id, а список —/. - Оставь их ниже
/tags. Express проверяет маршруты по порядку, и если сначала разместить/:id, он перехватит/tagsи будет искать рецепт с idtags. - Удали эти четыре маршрута из
server.js. - В
server.jsимпортируй маршрутизатор из./routes/recipes.jsи подключи его по пути/api/recipesс помощьюapp.useтам, где находились четыре маршрута: послеexpress.json()и до обработчика 404.
Проверь: Нажми «Играть» и отправь запрос к /api/recipes/tags. Ты должен увидеть ["breakfast","dinner","soup","sweet","vegan"]. Отправь запрос к /api/recipes/2: рецепт Pancakes, как и раньше. Отправь POST-запрос с телом {"title": "Toast"} к /api/recipes: статус 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.
// Внутри роутера пути задаются относительно места его подключения.
export default router;
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы Express
Потренируйтесь самостоятельно: Песочница Express