Выбор ответа Middle HTTP-сервер, Express, NestJS обновлено
Ошибки async-обработчиков в Express 5
Вопрос
В Express 5 async-обработчик бросил исключение после await. Что произойдёт?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Express 5 поймает отклонённый промис и вызовет next(err). Начиная с Express 5 роутер сам вызывает next(err), если обработчик вернул отклонённый промис, и ошибка попадает в обработчик ошибок (или в стандартный ответ 500). - unhandledRejection и зависший запрос это поведение Express 4: там нужна…
Варианты ответа
- Процесс упадёт с unhandledRejection, как в Express 4
- Express 5 поймает отклонённый промис и вызовет
next(err)правильный ответ - Запрос повиснет до таймаута клиента без ответа
- Ответ уйдёт с кодом 200 и пустым телом
Разбор
Начиная с Express 5 роутер сам вызывает next(err), если обработчик вернул отклонённый промис, и ошибка попадает в обработчик ошибок (или в стандартный ответ 500).
- unhandledRejection и зависший запрос это поведение Express 4: там нужна была обёртка вроде
asyncHandlerилиtry/catchсnext(err). - Ответа 200 при ошибке Express не отправляет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.