Script Valley
Express.js: APIs and Middleware
Express.js FundamentalsLesson 1.4

Route parameters and query strings in Express

req.params, req.query, dynamic route segments, colon syntax, optional params, query string parsing, multiple query params

Route Parameters vs Query Strings

Express gives you two ways to pass data in a URL: route parameters (part of the path) and query strings (after the ?).

Route parameters — req.params

app.get('/users/:id', (req, res) => {
  const { id } = req.params; // always a string
  const user = users.find(u => u.id === parseInt(id));
  if (!user) return res.status(404).json({ error: 'User not found' });
  res.json(user);
});

// Multiple params
app.get('/orgs/:orgId/users/:userId', (req, res) => {
  const { orgId, userId } = req.params;
  res.json({ orgId, userId });
});

Query strings — req.query

// GET /products?category=shoes&sort=price&limit=10
app.get('/products', (req, res) => {
  const { category, sort, limit = 20 } = req.query;
  // Filter/sort logic here
  res.json({ category, sort, limit: parseInt(limit) });
});

When to use which: Use route params for identifying a specific resource (/users/42). Use query strings for filtering, sorting, or pagination (/users?role=admin&page=2).

Route param values are always strings — always parse them when comparing to numbers. Query string values are also strings, including booleans: 'true' is not true.

Up next

Express Router — how to split routes into separate files

Sign in to track progress