Как выглядела структура проекта и где была сосредоточена логика
Что проверяют
Работали ли вы в проекте руками или только читали про MVC. Интервьюеру важно, где в вашем коде живут бизнес-правила и понимаете ли вы, почему именно там. Следом почти всегда спрашивают, что бы вы в этой структуре поменяли.
Как отвечать
Описывайте реальный проект, а не шаблон из статьи: фреймворк, размер, сколько сервисов. Дальше слои по направлению запроса:
- роуты и контроллеры: принимают HTTP, валидируют вход схемой (
zod,Joi, DTO сclass-validatorв NestJS), зовут сервис и превращают результат в ответ. Бизнес-решений тут нет; - сервисы (use cases): здесь сосредоточена логика. Сервис не знает про
reqиres, поэтому его можно вызвать из очереди, из крона или из теста; - репозитории: доступ к данным через Prisma, TypeORM, Mongoose или чистый SQL. Замена хранилища не трогает сервисы;
- middleware: сквозные задачи, то есть аутентификация, логирование, request id, rate limit и один общий обработчик ошибок;
- конфиг: переменные окружения читаются в одном месте и валидируются на старте, чтобы процесс падал сразу, а не на первом запросе.
Упомяните, как делили код: по слоям (controllers/, services/) или по фичам (users/, orders/, в каждой свой контроллер, сервис и репозиторий). Когда сущностей больше десятка, второй вариант удобнее, так устроены модули NestJS. Если были фоновые задачи на BullMQ или отдельные воркеры, скажите, как они переиспользовали сервисы.
Честно назовите слабое место: например, часть логики жила в контроллерах, и её было сложно тестировать.
Где спотыкаются
Отвечают, что логика в контроллерах. Это «толстый контроллер»: правило, завязанное на HTTP, не переиспользовать из воркера и не протестировать без поднятия сервера.
Рисуют идеальную схему, которой в проекте не было. На уточняющем вопросе про конкретный модуль это становится видно.
Не знают, как ловятся ошибки в асинхронных обработчиках. В Express 4 отклонённый промис сам до error middleware не доходит, нужен next(err) или обёртка, а Express 5 передаёт такие ошибки дальше автоматически.