SyntaxStudy
Sign Up
Node.js Route Groups and Nested Routers
Node.js Beginner 9 min read

Route Groups and Nested Routers

You can nest routers to create hierarchical URL structures. This is useful for versioned APIs (/api/v1/...) or resource-based grouping. Express also supports route-level parameters that parent routers pass down to child routers.

Example
// routes/api/v1/index.js
const express  = require('express');
const router   = express.Router();

const userRouter    = require('./users');
const productRouter = require('./products');

router.use('/users',    userRouter);
router.use('/products', productRouter);

module.exports = router;

// app.js — versioned API
const express = require('express');
const app     = express();
const v1      = require('./routes/api/v1');
const v2      = require('./routes/api/v2');

app.use(express.json());
app.use('/api/v1', v1);
app.use('/api/v2', v2);

// Resulting endpoints:
// GET  /api/v1/users
// POST /api/v1/users
// GET  /api/v1/products
// GET  /api/v2/users   (different logic)

// Passing router params to child routers:
// mergeParams: true lets the child see :userId from parent
const commentRouter = express.Router({ mergeParams: true });
commentRouter.get('/', (req, res) => {
    res.json({ userId: req.params.userId, comments: [] });
});

// Mount with param:
// router.use('/:userId/comments', commentRouter);

app.listen(3000, () => console.log('Versioned API on port 3000'));