Bird
Raised Fist0
Expressframework~10 mins

Why middleware is Express's core concept - Visual Breakdown

Choose your learning style10 modes available
Concept Flow - Why middleware is Express's core concept
Incoming HTTP Request
↓
Middleware 1: Process Request
↓
Middleware 2: Modify Request/Response
↓
Middleware 3: Route Handling or Next Middleware
↓
Send Response or Pass to Next Middleware
↓
End
Express processes each HTTP request by passing it through a chain of middleware functions that can modify the request or response, or decide to end the response.
Execution Sample
Express
app.use((req, res, next) => {
  console.log('Middleware 1');
  next();
});

app.use((req, res, next) => {
  res.send('Hello from Middleware 2');
});
This code shows two middleware functions: the first logs a message and calls next(), the second sends a response ending the chain.
Execution Table
StepMiddlewareActionOutputNext Called?
1Middleware 1Logs 'Middleware 1'No response sentYes
2Middleware 2Sends response 'Hello from Middleware 2'Response sent to clientNo
3EndNo more middleware calledRequest handling endsN/A
💡 Middleware 2 sends a response, so the chain stops here.
Variable Tracker
VariableStartAfter Middleware 1After Middleware 2Final
reqIncoming HTTP request objectPassed unchangedPassed unchangedUsed to send response
resResponse objectPassed unchangedResponse sent with 'Hello from Middleware 2'Response completed
nextFunction to call next middlewareCalled to continueNot calledChain ends
Key Moments - 2 Insights
Why does the second middleware stop the chain?
Because it sends a response with res.send(), Express stops calling further middleware as the response is complete (see execution_table step 2).
What happens if a middleware does not call next() or send a response?
The request will hang because Express waits for either next() to continue or a response to end the chain. Middleware 1 calls next() to avoid this (see execution_table step 1).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what does Middleware 1 do at step 1?
ASends a response to the client
BEnds the request without response
CLogs a message and calls next()
DThrows an error
💡 Hint
Check the 'Action' and 'Next Called?' columns in execution_table row 1.
At which step does Express stop calling middleware?
AStep 2
BStep 1
CStep 3
DNever stops
💡 Hint
Look at the 'Next Called?' column in execution_table; it is 'No' at step 2.
If Middleware 1 did not call next(), what would happen?
AMiddleware 2 would still run
BThe request would hang without response
CExpress would send a default response
DAn error would be thrown automatically
💡 Hint
Refer to key_moments about what happens if next() is not called.
Concept Snapshot
Express middleware are functions that process requests in order.
Each middleware can modify request/response or end the response.
Calling next() passes control to the next middleware.
Sending a response stops the chain.
Middleware chaining is core to Express's request handling.
Full Transcript
Express uses middleware functions to handle HTTP requests step-by-step. Each middleware receives the request and response objects and can either modify them, send a response, or pass control to the next middleware by calling next(). If a middleware sends a response, Express stops calling further middleware. If next() is not called and no response is sent, the request will hang. This chaining of middleware functions is the core concept of Express, allowing flexible and modular request processing.

Practice

(1/5)
1. Why is middleware considered the core concept in Express?
easy
A. Because it allows adding reusable functions to process requests and responses
B. Because it automatically generates HTML pages
C. Because it replaces the need for routing in Express
D. Because it stores data permanently in the database

Solution

  1. Step 1: Understand middleware role

    Middleware functions run during request processing to handle tasks like logging, authentication, or parsing.
  2. Step 2: Identify middleware's core purpose

    It allows adding reusable steps that can modify requests or responses before final handling.
  3. Final Answer:

    Because it allows adding reusable functions to process requests and responses -> Option A
  4. Quick Check:

    Middleware = reusable request handlers [OK]
Hint: Middleware = reusable steps for requests [OK]
Common Mistakes:
  • Thinking middleware generates HTML automatically
  • Confusing middleware with database storage
  • Believing middleware replaces routing
2. Which of the following is the correct syntax to use middleware in Express?
easy
A. app.route(function(req, res, next) { next(); });
B. app.middleware(function(req, res) { res.send('Hi'); });
C. app.use(function(req, res, next) { next(); });
D. app.handle(function(req, res) { next(); });

Solution

  1. Step 1: Recall Express middleware syntax

    Middleware is added using app.use() with a function that takes req, res, next.
  2. Step 2: Match syntax to options

    Only app.use(function(req, res, next) { next(); }); uses app.use and the correct function signature.
  3. Final Answer:

    app.use(function(req, res, next) { next(); }); -> Option C
  4. Quick Check:

    Middleware added with app.use() [OK]
Hint: Middleware uses app.use() with (req, res, next) [OK]
Common Mistakes:
  • Using app.middleware instead of app.use
  • Omitting the next parameter in middleware
  • Confusing app.route with middleware
3. What will be the output when this middleware is used?
app.use((req, res, next) => {
  console.log('Middleware 1');
  next();
});
app.use((req, res) => {
  res.send('Hello from Express');
});
medium
A. The server logs 'Middleware 1' and responds with 'Hello from Express'
B. The server responds with 'Middleware 1' text
C. The server throws an error because next() is missing
D. Nothing happens because middleware is not called

Solution

  1. Step 1: Analyze first middleware

    It logs 'Middleware 1' and calls next(), passing control to next middleware.
  2. Step 2: Analyze second middleware

    It sends the response 'Hello from Express', ending the request.
  3. Final Answer:

    The server logs 'Middleware 1' and responds with 'Hello from Express' -> Option A
  4. Quick Check:

    Middleware logs then sends response [OK]
Hint: Middleware logs then calls next() to continue [OK]
Common Mistakes:
  • Thinking next() is missing causing error
  • Expecting middleware to send response twice
  • Assuming middleware does not run in order
4. Identify the error in this middleware code:
app.use((req, res, next) => {
  res.send('Hello');
  next();
});
medium
A. Missing next parameter in function
B. Middleware must return a value
C. Middleware should not use res.send()
D. Calling next() after res.send() causes an error

Solution

  1. Step 1: Understand res.send() behavior

    res.send() ends the response and sends data to client.
  2. Step 2: Analyze calling next() after res.send()

    Calling next() after response is sent causes Express to try to continue processing, leading to errors.
  3. Final Answer:

    Calling next() after res.send() causes an error -> Option D
  4. Quick Check:

    Do not call next() after sending response [OK]
Hint: Don't call next() after res.send() [OK]
Common Mistakes:
  • Thinking next() is missing
  • Believing middleware must return a value
  • Assuming res.send() can be called multiple times
5. You want to create middleware that logs request method and URL, then passes control. Which code correctly implements this?
hard
A. app.use((req, res, next) => { next(); console.log(req.method, req.url); });
B. app.use((req, res, next) => { console.log(req.method, req.url); next(); });
C. app.use((req, res, next) => { res.send(req.method + req.url); next(); });
D. app.use((req, res) => { console.log(req.method, req.url); });

Solution

  1. Step 1: Check middleware signature and behavior

    Middleware must accept (req, res, next) and call next() to continue.
  2. Step 2: Verify logging and next call order

    Logging before calling next() ensures the log happens before moving on.
  3. Step 3: Evaluate options

    app.use((req, res, next) => { console.log(req.method, req.url); next(); }); logs method and URL, then calls next() correctly. app.use((req, res) => { console.log(req.method, req.url); }); misses next(), app.use((req, res, next) => { res.send(req.method + req.url); next(); }); sends response prematurely, app.use((req, res, next) => { next(); console.log(req.method, req.url); }); logs after next() which may be too late.
  4. Final Answer:

    app.use((req, res, next) => { console.log(req.method, req.url); next(); }); -> Option B
  5. Quick Check:

    Log then next() in middleware [OK]
Hint: Log first, then call next() in middleware [OK]
Common Mistakes:
  • Omitting next() parameter
  • Sending response inside logging middleware
  • Calling next() before logging
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard