Route groups
- Node.js course
- Intermediate
- Lesson 39/116
- 5 min
Learn to create route groups with Router.
Route groups
A route group groups routes that share a common prefix under one router. Example: user routes under /users: GET /users (list), GET /users/:id (one user), POST /users (new).
You do this with express.Router(): const userRouter = express.Router(); userRouter.get("/", listHandler); userRouter.get("/:id", detailHandler); app.use("/users", userRouter);. Paths inside the router are written without the prefix: "/" and "/:id". Express adds the /users prefix automatically. This pattern keeps all routes of a resource in one place. Code duplication drops, maintenance gets easier; each resource has its own router file.
Route parameters inside a router
You can add routes with parameters to a router. Example: userRouter.get("/:id", (req, res) => { res.send("User: " + req.params.id); });. When this router is mounted under /users, it handles a /users/5 request and req.params.id is "5".
Parameters inside a router are independent of the prefix the router is mounted under. The /:id route works the same whether the router is under /users or /admin/users. This makes the router reusable. You can also add router-specific middleware: userRouter.use(authMiddleware) runs only on user routes. This is useful for resource-based access control.
Practice Write a user route group
Define const userRouter = express.Router(). Add userRouter.get("/", (req, res) => res.send("User list")). Add userRouter.get("/:id", (req, res) => res.send("User: " + req.params.id)). Mount with app.use("/users", userRouter). The server requests /users/5.
Starter code
const express = require("express");
const app = express();
// Create a user router
// Send a list on the root route, a user on the :id route
// Mount under /users
// write here
const server = app.listen(3000, () => {
const http = require("http");
http.get("http://localhost:3000/users/5", (res) => {
let body = "";
res.on("data", (c) => body += c);
res.on("end", () => { console.log("Reply: " + body); server.close(); });
});
});Sample solution
const express = require("express");
const app = express();
const userRouter = express.Router();
userRouter.get("/", (req, res) => res.send("User list"));
userRouter.get("/:id", (req, res) => res.send("User: " + req.params.id));
app.use("/users", userRouter);
const server = app.listen(3000, () => {
const http = require("http");
http.get("http://localhost:3000/users/5", (res) => {
let body = "";
res.on("data", (c) => body += c);
res.on("end", () => { console.log("Reply: " + body); server.close(); });
});
});Expected output
Yanıt: Kullanıcı: 5
Questions and answers
Review the lesson questions together with their answers. To test yourself, solve the lesson interactively.
1 What is a route group for?
app.use("/users", userRouter)- Defines a single route
- Catches errors
- Groups routes with a common prefix Correct answer
- Parses JSON
Explanation: A route group gathers routes with a common prefix in one router.
2 Match each piece to its role
| Term | Meaning |
|---|---|
userRouter.get('/') |
List route |
userRouter.get('/:id') |
Single record route |
app.use('/users', ...) |
Mounts the router |
req.params.id |
User identifier |
3 Complete the router :id route
userRouter.get("/:id", (req, res) => {
res.send("Kullanıcı: " + req.____.id);
});
userRouter.get("/:id", (req, res) => {
res.send("Kullanıcı: " + req.params.id);
});
Explanation: req.params.id is used inside a router too.