Bird
Raised Fist0
Expressframework~20 mins

req.query for query strings in Express - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Query String Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
1:30remaining
What does req.query contain?
In an Express app, when a client sends a URL like /search?term=book&sort=asc, what will req.query contain?
A{"term": "book", "sort": "asc"}
B["term", "book", "sort", "asc"]
C"term=book&sort=asc"
Dundefined
Attempts:
2 left
💡 Hint
Think about how query strings are parsed into key-value pairs.
📝 Syntax
intermediate
1:30remaining
Accessing a query parameter safely
Given the URL /items?category=tools, which code correctly accesses the category query parameter in Express?
Express
app.get('/items', (req, res) => {
  // Access category here
});
Aconst category = req.params.category;
Bconst category = req.query.category;
Cconst category = req.body.category;
Dconst category = req.query[0];
Attempts:
2 left
💡 Hint
Query parameters come from the URL after the question mark.
🔧 Debug
advanced
2:00remaining
Why is req.query.page undefined?
An Express route expects a query parameter page. The URL is /list?page=2. The code is:
app.get('/list', (req, res) => {
  const page = req.query.page;
  res.send(`Page number is ${page}`);
});

But the response shows Page number is undefined. What is the likely cause?
AThe client did not send the query string properly; the URL is missing the question mark.
BThe Express app is missing middleware to parse query strings.
CThe query parameter name is case-sensitive and should be uppercase.
DThe route path is incorrect and does not match the URL.
Attempts:
2 left
💡 Hint
Check the URL format carefully.
❓ state_output
advanced
2:00remaining
What is the output of this Express route?
Consider this Express route:
app.get('/filter', (req, res) => {
  const { type = 'all', limit = 10 } = req.query;
  res.json({ type, limit });
});

What will be the JSON response for the URL /filter?limit=5?
A{"type": "all", "limit": 5}
B{"type": undefined, "limit": 5}
C{"type": "all", "limit": "5"}
D{"type": "all", "limit": 10}
Attempts:
2 left
💡 Hint
Remember that query parameters are strings by default.
🧠 Conceptual
expert
2:30remaining
Handling multiple values for the same query key
If a client sends the URL /search?tag=js&tag=node&tag=express, what will req.query.tag contain in Express by default?
Aundefined
B["js", "node", "express"]
C"js"
D"express"
Attempts:
2 left
💡 Hint
Express uses a simple parser for query strings by default.

Practice

(1/5)
1. What does req.query represent in an Express app?
easy
A. An object containing URL query parameters sent after the question mark
B. The body data sent in a POST request
C. The headers of the HTTP request
D. The cookies sent by the client

Solution

  1. Step 1: Understand the role of req.query

    req.query holds key-value pairs from the URL query string, which comes after the question mark in a URL.
  2. Step 2: Differentiate from other request parts

    Body data is accessed via req.body, headers via req.headers, and cookies via req.cookies. So, req.query is specifically for query parameters.
  3. Final Answer:

    An object containing URL query parameters sent after the question mark -> Option A
  4. Quick Check:

    req.query = URL query parameters [OK]
Hint: Remember: query = URL after '?' [OK]
Common Mistakes:
  • Confusing query parameters with body data
  • Thinking req.query holds headers or cookies
  • Assuming req.query is a string instead of an object
2. Which of the following is the correct way to access a query parameter named id in Express?
easy
A. req.params.id
B. req.query.id
C. req.body.id
D. req.headers.id

Solution

  1. Step 1: Identify where query parameters are stored

    Query parameters are stored in req.query, so to get the value of id, use req.query.id.
  2. Step 2: Differentiate from other request properties

    req.params is for route parameters, req.body is for POST data, and req.headers is for HTTP headers.
  3. Final Answer:

    req.query.id -> Option B
  4. Quick Check:

    Query param 'id' = req.query.id [OK]
Hint: Query params always use req.query.[name] [OK]
Common Mistakes:
  • Using req.params for query strings
  • Trying to get query data from req.body
  • Accessing query params from headers
3. Given this Express route handler, what will be logged if the URL is /search?term=books&page=2?
app.get('/search', (req, res) => {
  console.log(req.query.term);
  console.log(req.query.page);
  res.send('Done');
});
medium
A. term\npage
B. undefined\nundefined
C. books\n2
D. books\nundefined

Solution

  1. Step 1: Understand the URL query string

    The URL has query parameters: term=books and page=2. These are accessible via req.query.term and req.query.page.
  2. Step 2: Check what is logged

    The code logs req.query.term which is "books" and req.query.page which is "2" (strings).
  3. Final Answer:

    books 2 -> Option C
  4. Quick Check:

    req.query.term = 'books', req.query.page = '2' [OK]
Hint: Query values come as strings from req.query [OK]
Common Mistakes:
  • Expecting numbers instead of strings
  • Confusing query params with route params
  • Assuming undefined if query exists
4. What is the problem with this Express route handler?
app.get('/items', (req, res) => {
  const page = req.query.page;
  if (page > 0) {
    res.send(`Page number is ${page}`);
  } else {
    res.send('Invalid page');
  }
});
medium
A. res.send cannot be called inside an if statement
B. req.query.page is undefined, causing a crash
C. The route should use req.params instead of req.query
D. req.query.page is a string, so numeric comparison may fail

Solution

  1. Step 1: Identify the type of req.query.page

    Query parameters are strings by default, so req.query.page is a string, e.g., "1".
  2. Step 2: Understand comparison behavior

    Comparing a string with a number using > can lead to unexpected results because string comparison is lexicographic. The code should convert page to a number first.
  3. Final Answer:

    req.query.page is a string, so numeric comparison may fail -> Option D
  4. Quick Check:

    Convert query strings to numbers before numeric checks [OK]
Hint: Convert query strings to numbers before numeric comparisons [OK]
Common Mistakes:
  • Not converting query params to numbers
  • Assuming req.query.page is a number
  • Using req.params instead of req.query incorrectly
5. You want to create an Express route that reads optional query parameters sort and limit. If limit is missing or not a positive number, it should default to 10. Which code snippet correctly implements this behavior?
hard
A. app.get('/data', (req, res) => { const sort = req.query.sort || 'asc'; const limit = Number(req.query.limit) > 0 ? Number(req.query.limit) : 10; res.send(`Sort: ${sort}, Limit: ${limit}`); });
B. app.get('/data', (req, res) => { const sort = req.query.sort; const limit = req.query.limit || 10; res.send(`Sort: ${sort}, Limit: ${limit}`); });
C. app.get('/data', (req, res) => { const sort = req.query.sort ?? 'desc'; const limit = parseInt(req.query.limit) || 10; res.send(`Sort: ${sort}, Limit: ${limit}`); });
D. app.get('/data', (req, res) => { const sort = req.query.sort || 'desc'; const limit = req.query.limit > '0' ? req.query.limit : 10; res.send(`Sort: ${sort}, Limit: ${limit}`); });

Solution

  1. Step 1: Default sort parameter

    Use req.query.sort || 'asc' to default falsy/missing values to 'asc'.
  2. Step 2: Validate limit as positive number

    Number(req.query.limit) > 0 ? Number(req.query.limit) : 10 properly converts, checks positivity (>0), and defaults for missing/undefined/NaN/zero/negative.
  3. Step 3: Why others fail

    B: No sort default; limit || 10 accepts invalid like '-1'. C: parseInt(req.query.limit) || 10 accepts negatives ('-1' is truthy). D: req.query.limit > '0' does string comparison, accepts invalid like 'a' ("a" > "0").
  4. Final Answer:

    Number(req.query.limit) > 0 ? Number(req.query.limit) : 10 -> Option A
  5. Quick Check:

    Convert and validate query params before use [OK]
Hint: Always convert and validate query params before use [OK]
Common Mistakes:
  • Not converting query params to numbers
  • Using || default with parseInt causing wrong defaults
  • Comparing strings directly to numbers
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard