Express Router
Previously, we've learnt to declare our routes directly within our server.ts file:
/** server.ts*/import express from 'express'const port = 3000const server = express()server.get('/', (req, res) => {res.send('<h1>Hello world</h1>')})
However, as we add more routes to our Express server, this can become cumbersome. Express has built in functionality to separate our routes and make our code more modular:
Express Router
We can use express.Router to create modular route handlers. The following example creates a router as a module, defines some routes, and mounts the router module on a path in the main app (server.ts).
Let's say we want to create a /birds route where we can:
- view a list of birds via get
/birds - view a single bird by id via get
/birds/:id - add a new bird via post
/birds
Our code may look like this:
/** server.ts*/const express = require('express')const birdRoutes = require('./bird-routes.ts')const server = express()server.use('/birds', birdRoutes)server.get('/', (req, res) => {// ...})
/** bird-routes.ts*/import express from 'express'const router = express.Router()router.get('/', function (req, res) {// ...})router.get('/:id', function (req, res) {// ...})router.post('/', function (req, res) {// ...})export default router
Notice the differences:
server.ts- We use
server.useinstead ofserver.getto add our routes to our server. - We put the name of the route
/birdsto specify that ourbird-routes.tswill handle ALL routes that start with/birds.
- We use
bird-routes.ts- Notice how we don't specify
birdsanywhere in this file? This is because we have already specified this in ourserver.ts! This means that even though our first route is to/, it is actually/birdsbecause we have prefixed the route in our server file. - We import
expressand defineconst router = express.Router()as a separate variable. - We specify
router.getandrouter.postfor the individual routes and these take in two parameters - a path/and areq, rescallback function. - We export the router, and not the individual functions.
- Notice how we don't specify