Day12:路由模块化学习

4 阅读2分钟

一句话总结:

路由模块化的核心原则

分离引用更合适,路径叠加,主文件写相同部分,分文件写具体的。

一、核心代码

主文件 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.jsuser.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 挂上去。
主文件管“在哪挂”,分文件管“具体干啥”。
假期第一天,结构清晰了,后面加功能不乱了。