Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What are route params in Express?
Route params are dynamic parts of a URL defined with a colon (:) in the route path. They capture values from the URL to be used in the request handler.
Click to reveal answer
beginner
How can you access query parameters in an Express route handler?
Query parameters are accessed via req.query as an object containing key-value pairs from the URL after the question mark.
Click to reveal answer
beginner
Why is it important to validate route params and query parameters?
Validation ensures the data is correct and safe before using it. It prevents errors, security issues, and unexpected behavior in your app.
Click to reveal answer
intermediate
Name a simple way to validate route params and query in Express without external libraries.
You can manually check the values in req.params and req.query using JavaScript conditions like typeof, regex, or number checks.
Click to reveal answer
intermediate
What is a popular library to validate route params and query in Express?
Libraries like Joi or Zod help define schemas and validate route params and query parameters easily and clearly.
Click to reveal answer
How do you define a route param named 'id' in Express?
A/user/:id
B/user/id
C/user/?id
D/user/*id
✗ Incorrect
Route params use a colon before the name, like '/user/:id'.
Where do you find query parameters in an Express request?
Areq.body
Breq.headers
Creq.query
Dreq.params
✗ Incorrect
Query parameters are in req.query as key-value pairs.
Which of these is NOT a reason to validate route params?
APrevent security risks
BImprove app performance by caching
CAvoid runtime errors
DEnsure correct data format
✗ Incorrect
Validation helps with security and correctness, not caching or performance directly.
What does this code check? if (!Number.isInteger(+req.params.id))
AIf id is an integer number
BIf id is missing
CIf id is a string
DIf id is a boolean
✗ Incorrect
It converts id to a number and checks if it is an integer.
Which library is commonly used for schema validation in Express?
AExpress-validator
BReact
CLodash
DJoi
✗ Incorrect
Joi is a popular schema validation library for Express.
Explain how to validate a route parameter and a query parameter in Express without external libraries.
Think about simple JavaScript conditions to check values.
You got /3 concepts.
Describe why validating route params and query parameters is important in web applications.
Consider what could happen if you trust user input blindly.
You got /4 concepts.
Practice
(1/5)
1. What is the main reason to validate route parameters and query strings in an Express app?
easy
A. To automatically generate HTML pages
B. To speed up the server response time
C. To ensure the data is correct and prevent errors or security issues
D. To change the URL structure dynamically
Solution
Step 1: Understand the role of validation
Validation checks if the data coming from the user is correct and safe to use.
Step 2: Identify the benefits of validation
It prevents errors in the app and protects against malicious input that could cause security problems.
Final Answer:
To ensure the data is correct and prevent errors or security issues -> Option C
Quick Check:
Validation = prevent errors and security risks [OK]
Hint: Validation protects your app from bad or harmful input [OK]
Common Mistakes:
Thinking validation speeds up the server
Confusing validation with UI rendering
Believing validation changes URLs automatically
2. Which of the following is the correct way to access a route parameter named id in Express?
easy
A. req.route.id
B. req.query.id
C. req.body.id
D. req.params.id
Solution
Step 1: Recall Express request object properties
Route parameters are accessed via req.params.
Step 2: Match the parameter name
To get the id parameter, use req.params.id.
Final Answer:
req.params.id -> Option D
Quick Check:
Route params = req.params [OK]
Hint: Route params are always in req.params, not req.query [OK]
Common Mistakes:
Using req.query for route params
Trying to get params from req.body without POST data
Using req.route which is not for params
3. Consider this Express route handler:
app.get('/user/:id', (req, res) => {
const id = req.params.id;
if (!/^\d+$/.test(id)) {
return res.status(400).send('Invalid ID');
}
res.send(`User ID is ${id}`);
});
What will be the response if the URL is /user/abc123?
medium
A. User ID is abc123
B. Invalid ID
C. 404 Not Found
D. 500 Internal Server Error
Solution
Step 1: Understand the regex validation
The regex ^\d+$ matches only digits from start to end.
Step 2: Check the input against regex
The input abc123 contains letters, so it fails the test.
Step 3: Identify the response on failure
The code returns status 400 with message 'Invalid ID' when validation fails.
Final Answer:
Invalid ID -> Option B
Quick Check:
Non-digit ID triggers 400 error [OK]
Hint: Regex test fails non-digit IDs, returns 400 error [OK]
Common Mistakes:
Assuming letters pass the digit-only regex
Expecting 404 instead of 400 error
Thinking it returns the ID even if invalid
4. Given this Express route:
app.get('/search', (req, res) => {
const { term } = req.query;
if (!term || term.length < 3) {
res.status(400).send('Search term too short');
}
res.send(`Searching for ${term}`);
});
What is the bug in this code?
medium
A. It does not return after sending 400 response, causing headers error
B. It does not check if term is a string
C. It uses req.params instead of req.query
D. It should use POST method instead of GET
Solution
Step 1: Analyze the validation logic
If term is missing or too short, it sends a 400 response.
Step 2: Check flow after sending response
There is no return after res.status(400).send(), so code continues and tries to send another response.
Step 3: Identify the error caused
Sending two responses causes an error about headers already sent.
Final Answer:
It does not return after sending 400 response, causing headers error -> Option A
Quick Check:
Always return after sending error response [OK]
Hint: Return immediately after sending error response [OK]
Common Mistakes:
Missing return after res.send causes crash
Confusing req.params with req.query
Thinking GET cannot have query params
5. You want to validate both a route parameter userId (must be a number) and a query parameter active (must be 'true' or 'false') in Express. Which code snippet correctly validates both and returns 400 errors if invalid?
hard
A. app.get('/user/:userId', (req, res) => {
const { userId } = req.params;
const { active } = req.query;
if (!/^\d+$/.test(userId)) {
return res.status(400).send('Invalid userId');
}
if (active !== 'true' && active !== 'false') {
return res.status(400).send('Invalid active flag');
}
res.send(`User ${userId} active: ${active}`);
});
B. app.get('/user/:userId', (req, res) => {
const userId = Number(req.params.userId);
const active = req.query.active === true;
if (!userId) {
res.status(400).send('Invalid userId');
}
if (active !== true && active !== false) {
res.status(400).send('Invalid active flag');
}
res.send(`User ${userId} active: ${active}`);
});
C. app.get('/user/:userId', (req, res) => {
const { userId, active } = req.params;
if (isNaN(userId)) {
return res.status(400).send('Invalid userId');
}
if (active !== 'true' || active !== 'false') {
return res.status(400).send('Invalid active flag');
}
res.send(`User ${userId} active: ${active}`);
});
D. app.get('/user/:userId', (req, res) => {
const userId = req.params.userId;
const active = req.query.active;
if (typeof userId !== 'number') {
return res.status(400).send('Invalid userId');
}
if (active !== 'true' && active !== 'false') {
return res.status(400).send('Invalid active flag');
}
res.send(`User ${userId} active: ${active}`);
});
Solution
Step 1: Validate userId as digits string
uses regex ^\d+$ on req.params.userId, correctly checking it is numeric string.
Step 2: Validate active query param as 'true' or 'false'
checks active equals 'true' or 'false' strings, returning 400 if not.
Step 3: Confirm proper returns after errors
uses return after sending 400 responses, preventing multiple sends.
Final Answer:
Correctly validates both parameters and returns errors properly -> Option A