Middleware - в переводе "промежуточный слой". По факту - это функция, через которую автоматически проходят запросы. Можно задать функции, через которые будут проходить все без исключения запросы, а можно назначить эти функции определенным запросам.
Я бы еще добавила, что этот слой (который определяется пользователем) не является обязательным, но его удобно использовать для выполнения какой-нибудь дополнительной логики. Например, нужно проверять все запросы на удовлетворение определенному условию и перенаправлять запрос на другой адрес в случае необходимости.