middleware — это способ организации кода, который позволяет гибкое реиспользование кода для разных запросов.
Например, для главной страницы сайта нам нужно определять, откуда пришел юзер, а для формы логина — нет. Выносим механизм определения города по айпи в миддлварь и подключаем ее только для запросов на главную. Прелесть в том, что это отдельная функция, и ее вызов не надо прописывать в каждом контроллере явно, а достаточно указывать в роутах.