Node.js › Express & Middleware

What is the difference between application-level, router-level, and route-specific middleware in Express?

Intermediate

Answer

Application-level middleware (app.use()) applies to every request reaching the app (or matching a specified path prefix). Router-level middleware works the same way but is scoped to a specific express.Router() instance, letting a group of related routes (like everything under /api/v1/users) share middleware without affecting the rest of the app. Route-specific middleware is passed as an additional argument directly to a specific route definition, applying only to that single route.
// Application-level: every request
app.use(loggingMiddleware);

// Router-level: scoped to this router's routes only
const userRouter = express.Router();
userRouter.use(requireAuth);
userRouter.get('/profile', getProfileHandler);
app.use('/users', userRouter);

// Route-specific: applies only to this one route
app.post('/upload', uploadMiddleware, uploadHandler);
Real-world example An API structures its authentication requirement at the router level for an entire /admin router (protecting every admin route automatically), while applying a specific file-size-limiting middleware only to the single /upload route that actually needs it.

Common follow-ups: How does mounting a router with app.use('/prefix', router) affect the paths defined within that router?;What's the benefit of organizing related routes into separate router modules rather than defining everything directly on the main app object?