Middlewares¶
Middleware functions in Express.js are functions that execute before the final route handler.
They can modify the request (req
), response (res
), or even end the request-response cycle.
Basic Example¶
const express = require("express");
const app = express();
// Middleware function
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next(); // Passes control to the next middleware/route
});
app.get("/", (req, res) => {
res.send("Home Page");
});
app.listen(3000, () => console.log("Server running on port 3000"));
app.use()
→ Adds middleware to the entire appnext()
→ Moves to the next middleware or route handler
Types of Middleware¶
1. Application-Level Middleware¶
app.use((req, res, next) => {
console.log("Application-level middleware executed");
next();
});
Applies to all routes unless restricted by path:
app.use("/api", (req, res, next) => { ... });
2. Router-Level Middleware¶
Used with express.Router()
to apply middleware only to specific routers.
const router = express.Router();
router.use((req, res, next) => {
console.log("Router-level middleware");
next();
});
router.get("/", (req, res) => res.send("Users"));
app.use("/users", router);
3. Built-in Middleware¶
express.json()
→ Parses JSON dataexpress.urlencoded({ extended: true })
→ Parses URL-encoded form dataexpress.static("public")
→ Serves static files
app.use(express.json());
app.use(express.static("public"));
4. Third-Party Middleware¶
You can install and use external middleware packages.
npm install morgan cors
const morgan = require("morgan");
const cors = require("cors");
app.use(morgan("dev")); // Logs requests
app.use(cors()); // Enables CORS
5. Error-Handling Middleware¶
Used to handle errors globally. Must have four parameters.
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send("Something broke!");
});
Middleware Flow Example¶
app.use((req, res, next) => {
console.log("First middleware");
next();
});
app.use((req, res, next) => {
console.log("Second middleware");
next();
});
app.get("/", (req, res) => {
res.send("Final Route Handler");
});
Output:
First middleware
Second middleware
Then the response “Final Route Handler” is sent.