Объяснение
Middleware последовательно обрабатывает запрос. Ошибки async-handler нужно передавать установленному механизму framework. Отправка ответа не всегда прекращает дальнейший код функции.
Задача для самостоятельного решения
Почему после res.send часто нужен return?
Показать разбор ответа
Иначе код продолжится и может выполнить второй ответ или лишний побочный эффект. Структура ветвей должна гарантировать одно завершение запроса.