Loading...

Understanding Middleware in Express.js – A Complete Guide with Examples

Understanding Middleware in Express.js – A Complete Guide with Examples

Jeevan Singh

25 September, 2025

Express.js Logo


When working with Node.js and Express, you’ll frequently come across the term middleware. Middleware is at the heart of Express applications, making it possible to handle requests, responses, errors, authentication, logging, and much more. In this blog, we’ll break down what middleware is, why it’s important, and how you can use it effectively in your Node.js projects.

What is Middleware in Express?

In simple terms, middleware functions are functions that have access to the request (req), response (res), and the next function in the Express request-response cycle. They sit between the request and response and can perform tasks like:

  • Logging requests
  • Checking authentication
  • Validating user input
  • Handling errors
  • Modifying request/response objects

The next() function is crucial — it passes control to the next middleware in the stack. Without it, the request may hang.

Types of Middleware

1. Built-in Middleware

Express provides some middleware out of the box, such as:

app.use(express.json());      // Parse JSON bodies
app.use(express.urlencoded({ extended: true })); // Parse URL-encoded data

These are essential for handling form data and JSON payloads in modern APIs.

2. Third-party Middleware

Developers often use third-party middleware from npm to simplify common tasks:

const morgan = require('morgan');
const cors = require('cors');

app.use(morgan('dev'));  // Logging requests
app.use(cors());         // Enable Cross-Origin Resource Sharing

This reduces boilerplate and improves maintainability.

3. Custom Middleware

You can also create your own middleware functions. For example, a simple logger:

function myLogger(req, res, next) {
  console.log(`Request made to: ${req.url}`);
  next(); // Pass control to the next middleware
}

app.use(myLogger);

Custom middleware is where the true power of Express shines, letting you control the flow of requests.

Middleware Use Cases

1. Authentication Middleware

You can protect routes by checking for a valid token before allowing access:

function authMiddleware(req, res, next) {
  const token = req.headers['authorization'];
  if (token === 'my-secret-token') {
    next();
  } else {
    res.status(401).json({ message: 'Unauthorized' });
  }
}

app.get('/dashboard', authMiddleware, (req, res) => {
  res.send('Welcome to your dashboard!');
});

2. Error Handling Middleware

Special middleware for error handling has four parameters: (err, req, res, next).

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

This ensures errors are caught and handled gracefully.

Best Practices

  • Always call next() unless you’re ending the request.
  • Use route-specific middleware for sensitive logic (like authentication).
  • Organize middleware into separate files for cleaner code.
  • Place error-handling middleware at the end of the middleware stack.

Conclusion

Middleware is one of the most powerful concepts in Express. By mastering it, you can add logging, authentication, validation, and error handling seamlessly into your applications. Whether using built-in, third-party, or custom middleware, understanding how it works will make you a far more effective Node.js developer.

RECENT POSTS

Choosing a Tech Partner Who Actually Understands Regulatory Compliance

A few months back, a fintech client came to us after a failed product launch. Their previous development partner had built a solid lending app — clean UI, fast performance, good UX. The problem? Nobody on that team had accounted for RBI’s Digital Lending Guidelines around data storage and third-party data sharing. The app went […]

How Automation Reduces Manual Errors in Banking Back-Office Work

A few months ago, we sat down with the operations head of a mid-sized NBFC who told us something that stuck with us: “My team isn’t lazy or careless. They’re just human, and humans reconciling 40,000 transactions a day will always slip somewhere.” That one sentence sums up why banking back offices keep bleeding money […]

Building Dashboards for Real-Time Transaction Monitoring: What Actually Works in BFSI

A few months back, one of our fintech clients — a Mumbai-based NBFC processing close to 40,000 UPI and card transactions a day — came to us with a problem that sounded simple on the surface: “Our fraud team is looking at data that’s 15 minutes old, and by the time they act, the money’s […]

Why a Dedicated PM Matters in Outsourced Software Projects (Especially for BFSI Teams)

A few months ago, a fintech client came to us at Speqto Technologies after a rough experience with a previous outsourcing vendor. The code wasn’t the problem — their developers were competent. The problem was that nobody owned the project end to end. Requirements got lost in Slack threads, QA found bugs three sprints too […]

What Startup India and MeitY Recognition Actually Means When You’re Evaluating a Tech Vendor

If you’re on the vendor onboarding side of a bank, NBFC, or fintech company, you’ve seen this drill a hundred times. A vendor sends over a slick deck, promises the moon on integration timelines, and then your compliance team spends three weeks trying to figure out if this company even legally exists in a form […]

POPULAR TAG

POPULAR CATEGORIES