Why we use middleware