😋
Жизненный цикл запроса в Nest.jsNest.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