Challenge - 5 Problems
Middleware Factory Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate2:00remaining
What does this middleware factory produce?
Consider this Express middleware factory function. What will be the output when a request hits the route using this middleware?
Express
function greetMiddleware(greeting) {
return function(req, res, next) {
res.locals.message = `${greeting}, user!`;
next();
};
}
app.use(greetMiddleware('Hello'));
app.get('/', (req, res) => {
res.send(res.locals.message);
});Attempts:
2 left
💡 Hint
Think about how the factory function uses the greeting parameter inside the returned middleware.
✗ Incorrect
The factory function greetMiddleware takes a greeting string and returns a middleware function. This middleware sets res.locals.message to the greeting plus ', user!'. When the route handler sends res.locals.message, it outputs 'Hello, user!'.
📝 Syntax
intermediate2:00remaining
Identify the syntax error in this middleware factory
Which option correctly fixes the syntax error in this middleware factory code?
Express
function authMiddleware(role) {
return (req, res, next) => {
if(req.user.role !== role) {
res.status(403).send('Forbidden');
} else {
next()
}
}
}Attempts:
2 left
💡 Hint
Check if arrow functions require braces or semicolons in this context.
✗ Incorrect
The arrow function syntax is valid without semicolons after next() and the else block is correctly formed. No syntax error exists.
🔧 Debug
advanced2:00remaining
Why does this middleware factory not work as expected?
This middleware factory is supposed to log a custom message. Why does it always log 'undefined'?
Express
function logMessage(msg) {
return function(req, res, next) {
console.log(message);
next();
};
}
app.use(logMessage('Request received'));Attempts:
2 left
💡 Hint
Check variable names inside the returned middleware function.
✗ Incorrect
The middleware tries to log 'message' which is undefined. The parameter is named 'msg', so it should log 'msg'.
❓ state_output
advanced2:00remaining
What is the value of res.locals after this middleware runs?
Given this middleware factory and usage, what will be the value of res.locals.user after the middleware runs?
Express
function userMiddleware(name) {
return (req, res, next) => {
res.locals.user = { name };
next();
};
}
app.use(userMiddleware('Alice'));
app.get('/', (req, res) => {
res.json(res.locals.user);
});Attempts:
2 left
💡 Hint
Look at how res.locals.user is assigned inside the middleware.
✗ Incorrect
The middleware sets res.locals.user to an object with a name property equal to the passed name. So res.locals.user is { name: 'Alice' }.
🧠 Conceptual
expert2:00remaining
Why use a middleware factory instead of a simple middleware?
Which reason best explains why middleware factories are useful in Express?
Attempts:
2 left
💡 Hint
Think about how you can customize middleware behavior.
✗ Incorrect
Middleware factories let you create middleware functions that can be customized with parameters, making them reusable with different settings.