Здесь речь не о "контроллерах", а о
middleware. И в этом контексте цепочка вызова становится понятной. Например:
- нужно разобрать тело запроса,
- потом обработать куки,
- потом проверить аутентификацию пользователя,
- потом получить данные пользователя из БД (асинхронная операция),
- потом выполнить собственно контроллер роута (асинхронная операция),
- потом залогировать время выполнения скрипта,
- потом подчистить какие-то артефакты.
Главная причина такой архитектуры - попытка избавления от callback-hell. В Express всё на колбэках, которые плохо приспособлены к асинхронности, на самом деле. Вот и придумали такие "промисы для бедных" (тут я сильно упростил, конечно).