In Node.js (especially with ), middleware functions are functions that run between the request and the response cycle.
They have access to:
req(request)res(response)next()(function to pass control)
What middleware actually does
Middleware can:
- Modify request/response
- Execute logic (logging, validation, auth)
- End the request
- Pass control to the next middleware
Basic Example
app.use((req, res, next) => {
console.log("Request received");
next();
});
Here:
- Middleware runs on every request
next()moves execution forward
Types of Middleware in Node.js
There are 5 main types of middleware in Express:
1. Application-level Middleware
Applied globally using app.use() or app.METHOD()
app.use((req, res, next) => {
console.log("App-level middleware");
next();
});
Used for:
- Logging
- Authentication
- Common logic
2. Router-level Middleware
Applied to specific routes using router
const router = express.Router();
router.use((req, res, next) => {
console.log("Router middleware");
next();
});
Used when you want logic only for certain routes.
3. Built-in Middleware
Provided by Express itself
Examples:
express.json()→ parse JSONexpress.urlencoded()→ parse form data
app.use(express.json());
4. Third-party Middleware
External packages to add functionality
Examples:
cors→ enable cross-origin requestsmorgan→ logginghelmet→ security
const cors = require("cors");
app.use(cors());
5. Error-handling Middleware
Special middleware used to handle errors
👉 It has 4 parameters
app.use((err, req, res, next) => {
res.status(500).send("Something went wrong");
});
Middleware Execution Flow
Middleware runs in sequence (top to bottom)
app.use(middleware1);
app.use(middleware2);
app.use(middleware3);
Execution:
middleware1 → middleware2 → middleware3 → response
Real-world Use Cases
Middleware is used for:
- Authentication (JWT verification)
- Authorization (role check)
- Logging requests
- Input validation
- Error handling
- API rate limiting
Key Takeaway
Middleware in Node.js acts as a pipeline between request and response, allowing you to control, modify, and manage request flow efficiently. There are mainly 5 types of middleware, each serving a different purpose in building scalable backend applications.