全书目录

第十二篇:Express 完全指南 —— 老城区主干道宇宙

第八章:分区道路系统 —— 用 Router 把城市拆开

1 分钟 223 字 第 246 / 962 个阅读单元

小项目可以把所有路都写在 app.js,但一旦路口变多,整张地图会糊成一团。

这时要把老城区按片区拆开:

  • 东城区道路
  • 西城区道路
  • 管理员道路
  • API 道路

这就是 express.Router() 的作用。

#1. 基础拆分

routes/roadRoutes.js

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

router.get('/', (req, res) => {
  res.json([{ id: 1, name: '中山主路' }]);
});

router.get('/:roadId', (req, res) => {
  res.json({ id: req.params.roadId, name: '某条道路' });
});

module.exports = router;

app.js

js
const express = require('express');
const roadRoutes = require('./routes/roadRoutes');

const app = express();

app.use(express.json());
app.use('/roads', roadRoutes);

app.listen(3000);

此时路由映射关系是:

text
/roads        -> roadRoutes 里的 router.get('/')
/roads/:id    -> roadRoutes 里的 router.get('/:roadId')
#2. Router 就像“片区道路局”
text
app
├── /roads      → 道路管理分局
├── /districts  → 行政区分局
├── /admin      → 城建管理分局
└── /api        → 标准政务接口分局
#3. Router 也能挂中间件
js
const router = express.Router();

router.use((req, res, next) => {
  console.log('进入道路分局');
  next();
});

router.get('/', (req, res) => {
  res.send('道路列表');
});

这意味着:

不是所有检查站都要设在城门口,片区内部也可以有自己的门岗。