Practice
1. What is the main purpose of router-level middleware in Express?
easy
Solution
Step 1: Understand router-level middleware scope
Router-level middleware runs only for routes defined in that router, not the entire app.Step 2: Compare with other middleware types
Main app middleware runs for all routes, error middleware handles errors, static middleware serves files. Router middleware is specific to router routes.Final Answer:
To run middleware only for routes defined in a specific router -> Option BQuick Check:
Router middleware scope = specific router routes [OK]
Hint: Router middleware affects only its router's routes [OK]
Common Mistakes:
- Confusing router middleware with app-level middleware
- Thinking router middleware handles errors globally
- Assuming router middleware serves static files
2. Which of the following is the correct way to add middleware to an Express router?
easy
Solution
Step 1: Recall Express router middleware syntax
The correct method to add middleware to a router isrouter.use().Step 2: Check other options for validity
router.middleware,app.useRouter, androuter.addare not valid Express methods.Final Answer:
router.use(function(req, res, next) { next(); }); -> Option DQuick Check:
Use router.use() to add middleware [OK]
Hint: Use router.use() to add middleware to routers [OK]
Common Mistakes:
- Using non-existent methods like router.middleware or router.add
- Confusing app.useRouter with router.use
- Forgetting to call next() inside middleware
3. Consider this Express router code:
What will be printed in the console when a client requests
const express = require('express');
const router = express.Router();
router.use((req, res, next) => {
console.log('Middleware A');
next();
});
router.get('/test', (req, res) => {
res.send('Hello from test');
});
module.exports = router;What will be printed in the console when a client requests
/test on this router?medium
Solution
Step 1: Identify middleware behavior on route request
The router middleware logs 'Middleware A' and calls next(), so it runs before the route handler.Step 2: Understand console output vs response
The console.log prints 'Middleware A' to the server console. The response sends 'Hello from test' to the client but does not print to console.Final Answer:
Middleware A -> Option AQuick Check:
Middleware console.log prints 'Middleware A' [OK]
Hint: Middleware logs to console, route sends response [OK]
Common Mistakes:
- Confusing console output with response content
- Expecting both console and response text in console
- Ignoring the next() call in middleware
4. Given this router code:
What is the problem with this code?
const router = require('express').Router();
router.use((req, res, next) => {
console.log('First middleware');
next();
});
router.get('/hello', (req, res) => {
res.send('Hello World');
});
router.use((req, res) => {
});What is the problem with this code?
medium
Solution
Step 1: Analyze middleware execution order
Middleware and routes execute in the order defined. First middleware runs for all requests and calls next().Step 2: Trace unmatched route behavior
For unmatched routes like /foo: first middleware calls next(), /hello route doesn't match so next(), last middleware runs but does nothing--no response and no next() call.Step 3: Identify the consequence
The request pipeline stops without a response, causing the client request to hang indefinitely.Final Answer:
The last middleware does not call next(), causing requests to hang -> Option AQuick Check:
No response + no next() = request hangs [OK]
Hint: Every middleware must either respond or call next() [OK]
Common Mistakes:
- Thinking empty catch-all middleware is harmless
- Forgetting unmatched routes reach the last middleware
- Assuming the router automatically handles 404s
5. You want to apply a logging middleware only to routes under
What will happen when a client requests
/api in your Express app. You create a router and add middleware like this:const express = require('express');
const app = express();
const apiRouter = express.Router();
apiRouter.use((req, res, next) => {
console.log('API request:', req.method, req.url);
next();
});
apiRouter.get('/users', (req, res) => {
res.send('User list');
});
app.use('/api', apiRouter);
app.get('/', (req, res) => {
res.send('Home');
});What will happen when a client requests
/api/users and /?hard
Solution
Step 1: Understand router mounting path
The router is mounted at '/api', so its middleware runs only for routes starting with '/api'.Step 2: Analyze requests
Request to '/api/users' triggers the router middleware and route handler. Request to '/' goes directly to app.get('/') and skips router middleware.Final Answer:
Logging middleware runs only for /api/users, not for / -> Option CQuick Check:
Router middleware runs only on mounted path routes [OK]
Hint: Router middleware runs only on its mounted path routes [OK]
Common Mistakes:
- Assuming router middleware runs for all app routes
- Confusing app-level and router-level middleware scopes
- Expecting middleware to run for '/' when mounted on '/api'
