Script Valley
REST API Development: Beginner to Production
Building Your First API with Node.js and ExpressLesson 2.3

Express Router — organizing routes into separate files

express.Router, router files, app.use with prefix, modular routing, separation of concerns, route mounting

Organizing Routes with Express Router

Putting all routes in index.js doesn't scale past 10 routes. Express Router lets you split routes into separate files and mount them under a prefix.

Creating a Router Module

// routes/users.js
const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
  res.json({ message: 'List all users' });
});

router.get('/:id', (req, res) => {
  res.json({ message: `Get user ${req.params.id}` });
});

router.post('/', (req, res) => {
  res.status(201).json({ message: 'Create user', data: req.body });
});

module.exports = router;

Mounting Routers in app.js

// index.js
const express = require('express');
const app = express();
app.use(express.json());

const usersRouter = require('./routes/users');
const productsRouter = require('./routes/products');

app.use('/users', usersRouter);
app.use('/products', productsRouter);

app.listen(3000);

The prefix in app.use('/users', usersRouter) is prepended to all routes defined in the router. So router.get('/') handles GET /users and router.get('/:id') handles GET /users/:id. This pattern keeps each file small, focused, and testable in isolation.

Up next

Express middleware — what it is and how to use it

Sign in to track progress