📖 Scenario: You are building a simple Express server that needs to keep track of some information about each request, like a unique request ID and the time the request started. This helps in logging and debugging.
🎯 Goal: Create a middleware in Express that adds a requestContext object to each incoming request. This object should contain a unique requestId and a startTime. Then, use this context in a route to send back the request ID and start time.
📋 What You'll Learn
Create an Express app with a middleware function
Middleware adds a requestContext object to req
requestContext must have requestId as a unique string
requestContext must have startTime as the current timestamp
Create a GET route /info that returns JSON with requestId and startTime
💡 Why This Matters
🌍 Real World
Middleware like this is used in real web servers to track requests uniquely for logging, debugging, and performance monitoring.
💼 Career
Understanding request context middleware is important for backend developers working with Express or similar frameworks to build maintainable and debuggable web applications.
Progress0 / 4 steps
1
Setup Express app and import required modules
Write code to import express and create an Express app called app. Also, import crypto from Node.js to generate unique IDs.
Express
Hint
Use require('express') to import Express and express() to create the app.
2
Create request context middleware
Create a middleware function called requestContextMiddleware that adds a requestContext object to req. This object should have a requestId generated by crypto.randomUUID() and startTime set to Date.now(). Use app.use(requestContextMiddleware) to apply it.
Express
Hint
Middleware functions take req, res, next. Add requestContext to req and call next().
3
Create GET /info route using request context
Add a GET route /info to app that sends a JSON response with requestId and startTime from req.requestContext.
Express
Hint
Use app.get with path /info. Send JSON with res.json() using values from req.requestContext.
4
Start the Express server
Add code to start the Express server on port 3000 using app.listen. Log a message Server running on port 3000 when it starts.
Express
Hint
Use app.listen(3000, () => { ... }) to start the server and log the message.
Practice
(1/5)
1. What is the main purpose of request context middleware in Express?
easy
A. To serve static files like images and CSS
B. To handle database connections globally for all requests
C. To store and share data specific to each request across middleware and routes
D. To manage user authentication tokens only
Solution
Step 1: Understand request context middleware role
Request context middleware stores data that belongs to a single request, making it accessible throughout that request's lifecycle.
Step 2: Compare with other options
The other options describe different middleware roles but not the core purpose of request context middleware.
Final Answer:
To store and share data specific to each request across middleware and routes -> Option C
Quick Check:
Request context middleware = store per-request data [OK]
Hint: Remember: context middleware holds data per request only [OK]
Common Mistakes:
Confusing request context with global app state
Thinking it manages static files
Assuming it only handles authentication
2. Which of the following is the correct way to add a property to the request context in Express middleware?
easy
A. req.context = { userId: 123 }; next();
B. res.context.userId = 123; next();
C. app.context.userId = 123; next();
D. context.userId = 123; next();
Solution
Step 1: Identify where to store request-specific data
In Express, the request object (req) is unique per request, so adding a property to req is correct.
Step 2: Check other options for correctness
res is for response, app is global, and context alone is undefined, so only req.context works properly.
Final Answer:
req.context = { userId: 123 }; next(); -> Option A
Quick Check:
Store data on req object for request context [OK]
Hint: Attach context data to req, not res or app [OK]
Common Mistakes:
Using res or app instead of req for context
Forgetting to call next() after middleware
Assigning context to undefined variable
3. Given this middleware and route, what will be the output when a GET request is made to /user?
B. req.context is undefined, so assigning user property causes an error
C. res object is used incorrectly
D. next() is missing, so request hangs
Solution
Step 1: Check initialization of req.context
The code tries to assign user to req.context.user, but req.context was never created, so it's undefined.
Step 2: Understand the error cause
Accessing a property on undefined causes a runtime error. next() is called, so no hanging issue.
Final Answer:
req.context is undefined, so assigning user property causes an error -> Option B
Quick Check:
Initialize req.context before adding properties [OK]
Hint: Always initialize req.context before use [OK]
Common Mistakes:
Not initializing req.context as an object
Forgetting to call next()
Misusing res instead of req
5. You want to store a request ID in the context for every request and access it in multiple routes. Which is the best way to implement this in Express?
hard
A. Pass requestId as a query parameter in every route URL
B. Store requestId in a global variable and access it in routes
C. Attach requestId to res.locals and access it in routes
D. Create middleware that sets req.context = { requestId: uniqueId } and call next(), then read req.context.requestId in routes
Solution
Step 1: Understand request-specific data storage
Request ID is unique per request, so it must be stored in a per-request object like req.context.
Step 2: Evaluate options for sharing data
Global variables cause conflicts between concurrent requests, query parameters are not suitable for internal data sharing, and res.locals is primarily for template data rather than request processing.
Final Answer:
Create middleware that sets req.context = { requestId: uniqueId } and call next(), then read req.context.requestId in routes -> Option D
Quick Check:
Use req.context for per-request data sharing [OK]
Hint: Use middleware to set req.context with request ID [OK]
Common Mistakes:
Using global variables for request data
Relying on query parameters for context
Confusing res.locals with request context
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.