Loading...

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

From First Call to Project Launch — A BD’s Guide to Seamless Client Onboarding

From First Call to Project Launch — A BD’s Guide to Seamless Client Onboarding Chirag Verma 29/10/2025 In the IT industry, a client’s first impression can define the entire relationship. From the very first call to the moment a project officially begins, every step of the onboarding journey shapes how the client perceives your company’s […]

Understanding Event Loop & Async Behavior in Node.js

Understanding Event Loop & Async Behavior in Node.js Divya Pal 26 September, 2025 Node.js is known for its speed and efficiency, but the real magic powering it is the Event Loop. Since Node.js runs on a single thread, understanding how the Event Loop manages asynchronous tasks is essential to writing performant applications. In this blog, […]

REST vs GraphQL vs tRPC: Performance, Caching, and DX Compared with Real-World Scenarios

REST vs GraphQL vs tRPC: Performance, Caching, and DX Compared with Real-World Scenarios Shubham Anand 29-Oct-2025 API architecture selection—REST, GraphQL, and tRPC—directly impacts an application’s performance, caching, and developer experience (DX). In 2025, understanding how each performs in real-world scenarios is critical for teams seeking the right balance between reliability and agility. 1. REST: The […]

Collaborating in a Multi-Disciplinary Tech Team: Frontend and Beyond

Collaborating in a Multi-Disciplinary Tech Team: Frontend and Beyond Gaurav Garg 28-10-2025 Cross-functional collaboration is a force multiplier for product velocity and quality when teams align on shared goals, clear interfaces, and feedback loops across design, frontend, backend, DevOps, data, and QA. High-performing teams in 2025 emphasize structured rituals, shared artifacts (design systems, API contracts), […]

The Role of a BDE in Helping Businesses Modernize with Technology

The Role of a BDE in Helping Businesses Modernize with Technology Karan Kumar 28/10/2025 At Speqto Technologies, we’ve witnessed firsthand how technology has become the foundation of business success in 2025. But adopting new technologies isn’t just about staying trendy it’s about staying relevant, competitive, and efficient. That’s where a Business Development Executive (BDE) plays […]

POPULAR TAG

POPULAR CATEGORIES