Перейти к содержанию

Express в деталях: маршрутизация и middleware

Начало урока

Express в деталях: маршрутизация и middleware

Как запрос на самом деле проходит через приложение - и как управлять этим путём

Главная идея: В начальном курсе вы вызывали app.get и app.use, и всё работало. Теперь заглянем под капот. Приложение Express - это на самом деле конвейер: каждый запрос проходит через упорядоченный список функций - middleware и обработчиков маршрутов - пока одна из них не отправит ответ или не будет выброшена ошибка. Освойте порядок этого конвейера, и вы управляете всем: аутентификацией, логированием, разбором тела, маршрутизацией и обработкой ошибок.
К концу урока вы сможете:
  • объяснить цепочку middleware и точную задачу next(),
  • чётко понимать, почему важен порядок регистрации,
  • разбивать маршруты на модульные файлы с помощью express.Router(),
  • читать параметры маршрута, включая множественные и необязательные,
  • писать централизованный обработчик ошибок (middleware с четырьмя аргументами).

1. Конвейер запроса

Каждая функция, которую вы регистрируете через app.use, app.get, app.post и подобные, добавляется в единый упорядоченный стек. Когда приходит запрос, Express проходит этот стек сверху вниз, выполняя каждую функцию, чей путь и метод совпадают. Функция, получившая управление, может продолжить ровно тремя способами:

  • Отправить ответ - вызвать res.send, res.json, res.end и т. д. Конвейер останавливается; ничего ниже не выполняется.
  • Вызвать next() - передать управление следующей подходящей функции в стеке.
  • Вызвать next(err) - сразу перейти к обработчику ошибок (об этом в разделе 5).

Обычная функция middleware имеет сигнатуру (req, res, next). Обработчик маршрута - это просто middleware, привязанный к конкретному методу и пути. Это самая важная ментальная модель в Express: никакой магии, только упорядоченный список функций.

Аналогия. Представьте сборочный конвейер на фабрике. Деталь (запрос) едет по ленте мимо ряда станций (middleware). Каждая станция может осмотреть или изменить деталь и отправить её дальше через next(), либо вообще снять с ленты, отгрузив готовый продукт (res.send). Если станция обнаружила брак, она сбрасывает деталь в жёлоб для отбраковки - это next(err), и этот жёлоб ведёт к одной особой станции: обработчику ошибок.

Конвейер запроса в Express Запрос GET /users/7 логгер next() express.json() next() проверка авторизации next() обработчик маршрута Ответ 200 OK обработчик ошибок (err,req,res,next) next(err)
Каждая станция передаёт запрос дальше через next(); выброшенная ошибка перескакивает к обработчику ошибок с четырьмя аргументами.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя