Выбор ответа Middle HTTP-сервер, Express, NestJS обновлено

Ошибки async-обработчиков в Express 5

Вопрос

В Express 5 async-обработчик бросил исключение после await. Что произойдёт?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: Express 5 поймает отклонённый промис и вызовет next(err). Начиная с Express 5 роутер сам вызывает next(err), если обработчик вернул отклонённый промис, и ошибка попадает в обработчик ошибок (или в стандартный ответ 500). - unhandledRejection и зависший запрос это поведение Express 4: там нужна…

Варианты ответа

  1. Процесс упадёт с unhandledRejection, как в Express 4
  2. Express 5 поймает отклонённый промис и вызовет next(err)правильный ответ
  3. Запрос повиснет до таймаута клиента без ответа
  4. Ответ уйдёт с кодом 200 и пустым телом

Разбор

Начиная с Express 5 роутер сам вызывает next(err), если обработчик вернул отклонённый промис, и ошибка попадает в обработчик ошибок (или в стандартный ответ 500).

  • unhandledRejection и зависший запрос это поведение Express 4: там нужна была обёртка вроде asyncHandler или try/catch с next(err).
  • Ответа 200 при ошибке Express не отправляет.

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

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