📖 Scenario: You are building a simple Node.js server that handles requests step-by-step using middleware functions. Middleware are like helpers that process requests one after another, like a line of workers passing a package along.
🎯 Goal: Build a Node.js server using Express that demonstrates how middleware functions run in order and modify the request and response objects.
📋 What You'll Learn
Create an Express app with a basic route
Add two middleware functions that modify the request object
Modify the route handler to send a response using the modified request data
Understand the order of middleware execution and how next() controls flow
💡 Why This Matters
🌍 Real World
Middleware is used in real web servers to handle authentication, logging, data parsing, and more, all in a clean, step-by-step way.
💼 Career
Understanding middleware is essential for backend developers working with Node.js and Express, as it is a core pattern for building scalable web applications.
Progress0 / 4 steps
1
Set up Express app and initial route
Create a variable called express that requires the 'express' module. Then create a variable called app by calling express(). Finally, add a GET route on '/' that takes req, res and sends the text 'Hello' as the response.
Node.js
Hint
Use require('express') to import Express. Then call express() to create the app. Use app.get to add a route.
2
Add first middleware to add a property to request
Add a middleware function using app.use that takes req, res, and next. Inside it, add a property req.firstName with the value 'Alice'. Then call next() to pass control to the next middleware.
Node.js
Hint
Middleware functions get req, res, and next. Add the property to req and call next().
3
Add second middleware to add lastName to request
Add another middleware function using app.use that takes req, res, and next. Inside it, add a property req.lastName with the value 'Smith'. Then call next() to continue the flow.
Node.js
Hint
Just like the first middleware, add req.lastName and call next().
4
Modify route to send full name using middleware data
Change the GET route on '/' so that it sends a response with the text `Hello ${req.firstName} ${req.lastName}` using template literals. This shows how middleware data is used in the final response.
Node.js
Hint
Use template literals with backticks to include req.firstName and req.lastName in the response.
Practice
(1/5)
1. What is the main purpose of middleware in a Node.js Express app?
easy
A. To style the HTML pages
B. To directly send responses to the client without routes
C. To define database schemas
D. To run code on requests before they reach the route handlers
Solution
Step 1: Understand middleware role and compare options
Middleware functions run before route handlers to process requests. Only To run code on requests before they reach the route handlers describes middleware's role correctly; others describe unrelated tasks.
Final Answer:
To run code on requests before they reach the route handlers -> Option D
Quick Check:
Middleware = Pre-route code [OK]
Hint: Middleware runs before routes to handle requests [OK]
Common Mistakes:
Thinking middleware sends responses directly
Confusing middleware with database logic
Assuming middleware styles pages
2. Which of the following is the correct way to define a middleware function in Express?
easy
A. app.get((req, res) => { console.log('Middleware'); });
B. app.use((req, res, next) => { console.log('Middleware'); next(); });
C. app.middleware((req, res, next) => { next(); });
D. app.route('/').middleware((req, res) => { next(); });
Solution
Step 1: Recall Express middleware syntax and check options
Middleware uses app.use() with (req, res, next) parameters. Only app.use((req, res, next) => { console.log('Middleware'); next(); }); uses app.use() and calls next(), which is correct middleware syntax.
What will be printed in the console when a GET request is made to '/'?
medium
A. First\nSecond
B. Second\nFirst
C. Done
D. No output
Solution
Step 1: Understand middleware execution order and route handler
Middleware runs in the order added: first prints 'First', then calls next(), second prints 'Second'. After middleware, route handler sends response but does not print to console.
Final Answer:
First\nSecond -> Option A
Quick Check:
Middleware order = console logs order [OK]
Hint: Middleware logs appear in order added before route runs [OK]
D. It uses wrong parameters in middleware function
Solution
Step 1: Check middleware function and request flow effect
The middleware logs 'Start' but does not call next(), so it blocks further processing. Without next(), the route handler never runs, so the request hangs.
Final Answer:
It never calls next(), so the request hangs -> Option C
Quick Check:
Missing next() blocks request [OK]
Hint: Always call next() in middleware unless sending response [OK]
Common Mistakes:
Forgetting to call next() in middleware
Calling next() multiple times
Confusing middleware parameters
5. You want to add two middleware functions to log request time and check authentication before handling routes. Which code correctly ensures both run in order and the route handler executes after?