小项目可以把所有路都写在 app.js,但一旦路口变多,整张地图会糊成一团。
这时要把老城区按片区拆开:
- 东城区道路
- 西城区道路
- 管理员道路
- API 道路
这就是 express.Router() 的作用。
#1. 基础拆分
routes/roadRoutes.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
const express = require('express');
const roadRoutes = require('./routes/roadRoutes');
const app = express();
app.use(express.json());
app.use('/roads', roadRoutes);
app.listen(3000);此时路由映射关系是:
/roads -> roadRoutes 里的 router.get('/')
/roads/:id -> roadRoutes 里的 router.get('/:roadId')#2. Router 就像“片区道路局”
app
├── /roads → 道路管理分局
├── /districts → 行政区分局
├── /admin → 城建管理分局
└── /api → 标准政务接口分局#3. Router 也能挂中间件
const router = express.Router();
router.use((req, res, next) => {
console.log('进入道路分局');
next();
});
router.get('/', (req, res) => {
res.send('道路列表');
});这意味着:
不是所有检查站都要设在城门口,片区内部也可以有自己的门岗。