0
0
ExpressHow-ToBeginner · 3 min read

Middleware Execution Order in Express: How It Works

In Express, middleware functions execute in the order they are added with app.use() or route handlers. Each middleware must call next() to pass control to the next one, ensuring a clear, sequential flow.
📐

Syntax

Middleware in Express is a function with three parameters: req, res, and next. You add middleware using app.use() or directly in route handlers. The next() function passes control to the next middleware in line.

  • req: The request object.
  • res: The response object.
  • next: Function to call the next middleware.
javascript
app.use(function (req, res, next) {
  // Middleware logic here
  next();
});
💻

Example

This example shows three middleware functions added in order. Each logs a message and calls next(). The output shows the order they run when a request is made.

javascript
import express from 'express';
const app = express();

app.use((req, res, next) => {
  console.log('First middleware');
  next();
});

app.use((req, res, next) => {
  console.log('Second middleware');
  next();
});

app.get('/', (req, res) => {
  console.log('Route handler');
  res.send('Hello from Express!');
});

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});
Output
Server running on http://localhost:3000 First middleware Second middleware Route handler
⚠️

Common Pitfalls

One common mistake is forgetting to call next() in middleware, which stops the request from moving forward and causes the request to hang. Another is adding middleware in the wrong order, which can lead to unexpected behavior.

javascript
import express from 'express';
const app = express();

// Wrong: Missing next(), request will hang here
app.use((req, res, next) => {
  console.log('Middleware without next');
  // next() is missing
});

app.get('/', (req, res) => {
  res.send('This will never run');
});

// Correct: Calls next() to continue
app.use((req, res, next) => {
  console.log('Middleware with next');
  next();
});
📊

Quick Reference

Remember these tips for middleware order:

  • Middleware runs in the order added.
  • Always call next() unless ending the response.
  • Route handlers are middleware that usually end the response.
  • Use app.use() for general middleware, and route methods for specific paths.

Key Takeaways

Middleware executes in the order it is added to the Express app.
Always call next() in middleware to continue the request flow.
Route handlers are the last middleware that usually send a response.
Incorrect middleware order or missing next() causes requests to hang.
Use app.use() for global middleware and route methods for specific paths.