How does routing work in Express? Explain route parameters and query strings, the difference between app.get() and router.get(), and how to nest routers.
Show the explanation
Model answer. A route pairs an HTTP method and a path pattern with handler functions.
// routes/courses.js
import { Router } from 'express';
const router = Router();
router.get('/', listCourses); // GET /courses?level=ug
router.get('/:code', getCourse); // GET /courses/btech
router.post('/', requireAdmin, createCourse);
export default router;
// routes/reviews.js, nested under a course
const reviews = Router({ mergeParams: true }); // can read :code from the parent
reviews.get('/', (req, res) => res.json(findReviews(req.params.code)));
// app.js
app.use('/courses', coursesRouter);
coursesRouter.use('/:code/reviews', reviews); // GET /courses/btech/reviews- Route parameters are named path segments:
req.params.code. - Query strings are optional filters after
?:req.query.level. - `app.get()` registers a route directly on the application. `router.get()` registers it on a mini-app (
express.Router()) that you mount at a prefix withapp.use(). Routers keep each feature in its own file, and let you attach middleware to a group of routes. - Nesting is mounting one router inside another; use
mergeParams: trueto read the parent's parameters.
Original UniCircle question. Last reviewed 22 Oct 2026.
