😋 Жизненный цикл запроса в Nest.js
Nest.js обмазан синтаксическим сахаром: пишешь @Controller, @Get — и всё работает. Но под капотом у каждого запроса есть целая цепочка этапов. Давай разберёмся, кто первый встречает твой запрос, а кто последний
Вопрос частый на собесах, рекомендую внимательно прочитать 😇
💐 Middleware
Самый первый уровень. Тут можно переписать req, добавить хедеры, логировать. По сути — «до Nest-а». Работают так же, как в Express/Fastify
😱 Guard’ы
Самые первые на пути. Проверяют, можно ли вообще пропустить запрос дальше (авторизация, роли, доступ). Если guard сказал «нет» — дальше никто не работает.
☺️ Interceptor (до вызова)
Может подменить данные запроса или добавить что-то в контекст. Часто используют для логирования или кэширования.
😳 Pipe’ы
Проверяют и трансформируют входные данные (валидаторы, касты типов). Например, ParseIntPipe превратит строку id в число. Если данные грязные — кидают ошибку и обрубают цикл.
🐱 Controller
Тут твой метод с бизнес-логикой
🪢 Interceptor (после вызова)
Может преобразовать ответ перед тем, как он уйдёт клиенту (например, обернуть результат в единую структуру ответа) — удобно для фронтов
🟩 Exception Filter
Если где-то в цепочке бахнуло исключение — фильтр красиво его поймает и вернёт красивый ответ вместо 500-ки. Тоже удобно для фронтов, чтобы можно было вывести ошибку
⸻
⚡ Итоговый маршрут:
Middleware → Guard → Interceptor (до) → Pipe → Controller → Interceptor (после) → Exception Filter
🚀 Пост Guru Node.js: @DemetraIT
Post #388
211
- ❤ 3
- 🏆 3
- 🔥 2