Ответ вслух Middle Ошибки и логирование спрашивают часто обновлено

Как ты обрабатываешь ошибки в Node-сервисе

Вопрос

Расскажи, как ты организуешь обработку ошибок в бэкенде на Node.js.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Сначала разделяю ошибки. Операционные, например таймаут базы или невалидный ввод, ожидаемы, их обрабатываю: повтор, понятный ответ клиенту, запасной путь.

Что должно прозвучать в ответе

  • Делю ошибки на операционные (обработать) и программные (починить, процесс упасть)

  • Свои классы ошибок со статусом и кодом, исходная причина в cause

  • Один централизованный обработчик: error middleware в Express или exception filter в NestJS

  • Клиенту безопасный ответ без стека, в лог всё с request id

  • unhandledRejection и uncaughtException: лог, Sentry/GlitchTip, выход; перезапускает оркестратор

  • Не глотать ошибки пустым catch и не логировать одну ошибку много раз

Что могут спросить следом

  • Где логировать ошибку: там, где поймал, или наверху?
  • Как отличить 4xx от 5xx в централизованном обработчике?
  • Как сделать повтор только для временных ошибок?

Разбор

Сначала разделяю ошибки. Операционные, например таймаут базы или невалидный ввод, ожидаемы, их обрабатываю: повтор, понятный ответ клиенту, запасной путь. Программные это баги, их не прячу.

Для бизнес-ошибок завожу свои классы: NotFoundError, ValidationError, ConflictError, у каждой HTTP-статус и машинный код. Оборачивая низкоуровневую ошибку, передаю её в cause, чтобы не терять причину.

Обработка в одном месте: error middleware в Express или exception filter в NestJS. Он превращает известные ошибки в нужный статус, а всё неизвестное в 500 с общим текстом без стека. В лог идёт полная информация с request id, и ошибка логируется один раз, именно там.

На глобальные unhandledRejection и uncaughtException вешаю логирование и отправку в систему ошибок, после чего процесс завершается: состояние после непойманной ошибки ненадёжно, а перезапуск сделает оркестратор.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.