一句话总结:
路由模块化的核心原则:
分离引用更合适,路径叠加,主文件写相同部分,分文件写具体的。
一、核心代码
主文件 app.js
javascript
const express = require('express');
const app = express();
const port = 3000;
// 引入分模块路由
const userRouter = require('./router/user');
app.use('/user', userRouter);
const dynamicRouter = require('./router/dynamic');
app.use('/', dynamicRouter);
const comment = require('./router/comment');
app.use('/comment', comment);
app.listen(port, () => {
console.log(`服务器正在${port}启动成功`);
});
分文件 router/user.js
javascript
const express = require('express');
const router = express.Router();
router.post('/login', (req, res) => {
res.send('登录成功router');
});
router.post('/register', (req, res) => {
res.send('注册成功router');
});
module.exports = router;
分文件 router/dynamic.js
javascript
const express = require('express');
const router = express.Router();
router.get('/dynamic', (req, res) => {
res.send('动态获取成功router');
});
router.post('/dynamic', (req, res) => {
res.send('发布动态成功router');
});
router.delete('/dynamic', (req, res) => {
res.send('删除动态成功router');
});
router.put('/dynamic', (req, res) => {
res.send('修改动态成功router');
});
module.exports = router;
分文件 router/comment.js
javascript
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('获取评论成功router');
});
router.post('/', (req, res) => {
res.send('发表评论成功router');
});
module.exports = router;
建议写成 comment.js和user.js的形式,主文件里面不需要重复引入相同路径,减少代码冗余。
二、今天踩的坑 & 解决的收获
坑 1:把 router.post 写成了 router.post =
javascript
// ❌ 错误写法
router.post = ('/login', (req, res) => { ... })
// ✅ 正确写法
router.post('/login', (req, res) => { ... })
为什么没报错?
router.post = 在 JS 语法上是对的(赋值操作),但它把方法覆盖了,导致路由失效,逻辑错误但语法通顺。
教训:不是所有错误都会报红,逻辑错比语法错更难找。
坑 2:路径叠加导致 404
javascript
// 主文件写
app.use('/user', userRouter);
// 分文件又写
router.post('/user/login', ...)
// 最终变成
/user/user/login ❌ 404
解决原则:
主文件写“命名空间”(如
/user),分文件写“具体路径”(如/login),不重复。
三、HTTP 方法速查表
| 方法 | 操作 | 无人机项目对应 |
|---|---|---|
| GET | 获取数据 | 获取无人机列表、获取某张图片 |
| POST | 新增数据 | 上传图片、注册、登录 |
| PUT | 整体修改 | 修改无人机所有信息 |
| PATCH | 部分修改 | 只改电池电量 |
| DELETE | 删除数据 | 删除某条航线记录 |
PATCH 没学过不碍事,写法跟 POST 一样,只是语义不同。
记不住时问自己:“我是要拿、给、改、还是删?”
四、今天的小进步(真实记录)
- 能独立完成路由分离 + 导入
- 能说出
app.use('/user', userRouter)+router.post('/login')=/user/login - 能区分 GET / POST / PUT / DELETE 的使用场景
- 能看懂报错,拼写错误自己查
- 理解了“骨架不变,只改内容”的代码模式(无人机项目也这样)
五、一句话总结
路由模块化 = 把代码拆开写,用
require拉回来,用app.use挂上去。
主文件管“在哪挂”,分文件管“具体干啥”。
假期第一天,结构清晰了,后面加功能不乱了。