Bird
Raised Fist0
Expressframework~5 mins

req.query for query strings in Express

Choose your learning style10 modes available
Introduction

req.query lets you get information sent in the URL after a question mark. This helps your app understand what the user wants without changing the page.

When you want to filter a list on a webpage, like showing only red shirts.
When you want to search for something using keywords typed in the URL.
When you want to control how many items show on a page, like 10 or 20.
When you want to remember user choices without saving them in a database.
When you want to pass small bits of data between pages without forms.
Syntax
Express
req.query.propertyName

req.query is an object containing all query string parameters as key-value pairs.

Each property corresponds to a parameter name in the URL.

Examples
This gets the 'term' from the URL like /search?term=books and shows it back.
Express
app.get('/search', (req, res) => {
  const term = req.query.term;
  res.send(`You searched for: ${term}`);
});
This reads 'page' from the URL and uses 1 if none is given, like /items?page=3.
Express
app.get('/items', (req, res) => {
  const page = req.query.page || 1;
  res.send(`Page number: ${page}`);
});
This reads multiple query parameters, like /filter?color=red&size=large.
Express
app.get('/filter', (req, res) => {
  const color = req.query.color;
  const size = req.query.size;
  res.send(`Filter by color: ${color}, size: ${size}`);
});
Sample Program

This simple server listens on port 3000. When you visit /greet?name=Alice, it says 'Hello, Alice!'. If no name is given, it says 'Hello, Guest!'.

Express
import express from 'express';
const app = express();
const port = 3000;

app.get('/greet', (req, res) => {
  const name = req.query.name || 'Guest';
  res.send(`Hello, ${name}!`);
});

app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});
OutputSuccess
Important Notes

Query string values are always strings. Convert them if you need numbers.

If a query parameter is missing, its value will be undefined.

Use default values to avoid errors when parameters are missing.

Summary

req.query reads data sent in the URL after the question mark.

It helps your app respond differently based on user input in the URL.

Always check if query parameters exist before using them.

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