Skip to main content

Command Palette

Search for a command to run...

Understanding Middleware in Express.js

Updated
•4 min read•View as Markdown

Middleware is one of the most important concepts in Express.js.

At first, beginners usually memorize syntax like:

app.use()

without understanding what middleware actually does.

But middleware is the reason Express applications become:

  • organized

  • scalable

  • reusable

Almost every real-world Express application uses middleware heavily.


What is Middleware?

Middleware is a function that runs between:

  • receiving a request

  • sending a response

It acts like a checkpoint inside the request lifecycle.

Middleware can:

  • modify request data

  • check authentication

  • validate input

  • log requests

  • stop requests

  • pass control forward


Understanding Middleware Using a Pipeline Analogy

Think of a request like a package moving through checkpoints.

Example flow:

Request → Middleware → Route Handler → Response

At every checkpoint:

  • request can be inspected

  • modified

  • blocked

  • forwarded

That checkpoint system is middleware.


Where Middleware Sits in the Request Lifecycle

When a request reaches the server:

  1. middleware executes

  2. request gets processed

  3. route handler runs

  4. response is returned

Middleware sits before the final response.


Basic Middleware Example

const express = require("express")

const app = express()

app.use((req, res, next) => {

  console.log("Middleware Executed")

  next()

})

app.get("/", (req, res) => {
  res.send("Home Page")
})

Here:

  • middleware runs first

  • next() passes control forward

  • route handler executes afterward


Role of next() Function

next() is extremely important.

It tells Express:

“Move to the next middleware or route handler.”

Without next():

  • request gets stuck

  • response never reaches client

Example:

app.use((req, res, next) => {

  console.log("Checking Request")

  next()

})

Middleware Execution Order

Middleware runs in the order it is written.

Example:

app.use((req, res, next) => {
  console.log("Middleware 1")
  next()
})

app.use((req, res, next) => {
  console.log("Middleware 2")
  next()
})

Execution order:

Middleware 1
Middleware 2

Order matters heavily in Express applications.


Request → Middleware → Response Flow


Types of Middleware

Express provides different types of middleware.


Application-Level Middleware

Applied to the entire application.

Example:

app.use((req, res, next) => {
  console.log("Global Middleware")
  next()
})

Runs for every request.


Router-Level Middleware

Applied only to specific routes.

Example:

router.use((req, res, next) => {
  console.log("Router Middleware")
  next()
})

Useful for route grouping.


Built-In Middleware

Express already provides built-in middleware.

Example:

app.use(express.json())

This middleware:

  • parses incoming JSON data

Without it:

  • req.body would not work properly

Real-World Middleware Examples

Middleware is used everywhere in backend applications.


Logging Middleware

Tracks incoming requests.

Example:

app.use((req, res, next) => {

  console.log(req.method, req.url)

  next()

})

Useful for debugging.


Authentication Middleware

Checks whether user is logged in.

Example:

app.use((req, res, next) => {

  const token = req.headers.authorization

  if (!token) {
    return res.send("Unauthorized")
  }

  next()

})

Protects private routes.


Request Validation Middleware

Checks incoming data before processing.

Example:

  • email validation

  • required fields

  • input sanitization

This prevents invalid requests from reaching business logic.


Why Middleware Matters

Without middleware:

  • code becomes repetitive

  • logic gets duplicated

  • request handling becomes messy

Middleware helps separate concerns cleanly.


Real-World Thinking

In large applications:

  • dozens of middleware functions may run for one request

Examples:

  • logging

  • authentication

  • rate limiting

  • validation

  • file handling

Middleware creates a structured request pipeline.


How to Think About Middleware

Simple mental model:

  • request enters server

  • middleware checks/processes request

  • route handler sends final response

That is the complete flow.


One Line Summary

Middleware functions process requests between the client request and final server response in Express.js.


Conclusion

Middleware is a core part of Express.js because it allows requests to pass through reusable processing layers before reaching route handlers.

Using middleware properly helps organize applications, improve security, validate requests, and simplify backend architecture.

Understanding middleware is essential for building scalable Express applications.