How does routing work in Express, including route parameters and modular routers?
3 minbeginnernodejsexpressroutingparamsrouter
Quick Answer
Routes map an HTTP method + path pattern to handlers. Path segments like /users/:id become req.params; query strings become req.query. express.Router() groups related routes into mountable modules (e.g. all /users routes) for a clean, scalable structure.
Detailed Answer
Answer:
Basic routing — method + path → handler:
app.get('/users', listUsers);
app.post('/users', createUser);
app.put('/users/:id', updateUser);
app.delete('/users/:id', deleteUser);
Route parameters and query strings:
// GET /users/42?fields=name
app.get('/users/:id', (req, res) => {
req.params.id; // '42' (path parameter)
req.query.fields; // 'name' (query string)
});
Modular routers — group related routes and mount them:
// routes/users.js
const router = require('express').Router();
router.get('/', listUsers); // GET /users
router.get('/:id', getUser); // GET /users/:id
router.post('/', createUser); // POST /users
module.exports = router;
// app.js
app.use('/users', require('./routes/users'));
This keeps a growing app organized — one router file per resource — and lets you attach router-level middleware (e.g., auth for all /admin routes).
Useful details:
- Routes are matched in order; put more specific routes before catch-alls.
app.route('/users').get(...).post(...)chains methods for one path.- Patterns support optional segments and (in Express 4) regex; Express 5 changed some pattern syntax.
- A final
app.use((req, res) => res.status(404).json({error: 'Not found'}))handles unmatched routes.