This Express app sets a fake user, then uses two middleware functions to check if the user is logged in and is an admin before showing a welcome message.
Hint: Use arrays to group middleware in routes [OK]
Common Mistakes:
Using logical operators instead of arrays
Passing middleware as a single combined expression
Forgetting to include middleware before handler
3. Given the middleware functions below, what will be the response when a request with req.user = { role: 'user' } hits the route?
function checkToken(req, res, next) {
if (!req.user) return res.status(401).send('No token');
next();
}
function checkAdmin(req, res, next) {
if (req.user.role !== 'admin') return res.status(403).send('Forbidden');
next();
}
app.get('/secure', [checkToken, checkAdmin], (req, res) => res.send('Welcome admin'));
medium
A. Welcome admin
B. Forbidden
C. No token
D. Internal Server Error
Solution
Step 1: Analyze checkToken middleware
It checks if req.user exists. Here req.user is { role: 'user' }, so it passes and calls next().
Step 2: Analyze checkAdmin middleware
It checks if req.user.role is 'admin'. Here it is 'user', so it returns 403 Forbidden response.
Final Answer:
Forbidden -> Option B
Quick Check:
Role check fails = Forbidden [OK]
Hint: Check middleware order and conditions carefully [OK]
Common Mistakes:
Assuming role 'user' passes admin check
Ignoring middleware that sends response early
Confusing status codes
4. Identify the error in this middleware composition code:
function auth(req, res, next) {
if (!req.headers.authorization) {
res.status(401).send('Unauthorized');
}
next();
}
app.get('/data', auth, (req, res) => res.send('Data'));
medium
A. Missing return after sending 401 response, so next() runs anyway
B. Middleware should be async function
C. Route handler missing res.end() call
D. Authorization header check should be in route handler
Solution
Step 1: Check middleware flow
If authorization header is missing, it sends 401 but does not stop execution.
Step 2: Identify missing return
Without return after res.status(401).send(), next() is called anyway, causing route handler to run incorrectly.
Final Answer:
Missing return after sending 401 response, so next() runs anyway -> Option A
Quick Check:
Send response must stop middleware with return [OK]
Hint: Always return after sending response in middleware [OK]
Common Mistakes:
Calling next() after sending response
Thinking async needed for simple middleware
Putting auth logic in route handler
5. You want to create a reusable middleware group for routes that require both token validation and admin role check. Which is the best way to compose and apply these middlewares in Express?
hard
A. Use a global app.use() for all routes regardless of auth needs
B. Create a single middleware combining both checks and use it in routes
C. Call each middleware manually inside the route handler function
D. Use an array of separate middlewares and apply the array to routes
Solution
Step 1: Understand middleware grouping
Grouping middlewares as an array keeps each check separate and reusable.
Step 2: Compare options
Use an array of separate middlewares and apply the array to routes uses an array of middlewares applied to routes, which is clean and composable. Create a single middleware combining both checks and use it in routes merges checks into one, losing modularity. Call each middleware manually inside the route handler function is manual and error-prone. Use a global app.use() for all routes regardless of auth needs applies auth globally, which is not selective.
Final Answer:
Use an array of separate middlewares and apply the array to routes -> Option D
Quick Check:
Middleware arrays = reusable and clean [OK]
Hint: Group middlewares in arrays for reuse [OK]
Common Mistakes:
Combining all logic into one middleware
Calling middleware inside handlers manually
Applying auth globally without route control
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.