CodeBlanks Logo Icon CodeBlanks

Route groups

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

index.js
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

index.js
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?

index.js
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

Question
userRouter.get("/:id", (req, res) => {
  res.send("Kullanıcı: " + req.____.id);
});
Answer
userRouter.get("/:id", (req, res) => {
  res.send("Kullanıcı: " + req.params.id);
});

Explanation: req.params.id is used inside a router too.

All lessons in Intermediate