Node.js 中如何正确设计多级路由结构?
我正在用原生 Node.js 写一个后端服务,想把用户相关的接口放在 /api/users 下,但不知道怎么组织路由文件才清晰。现在所有逻辑都堆在主入口里,代码越来越乱。
试过自己写中间件匹配路径前缀,但参数解析和子路由处理总是出问题。比如访问 /api/users/123 时,后面的 ID 拿不到。有没有推荐的路由拆分方式?
const http = require('http');
const server = http.createServer((req, res) => {
if (req.url.startsWith('/api/users')) {
// 这里怎么优雅地处理 /api/users/:id 和 /api/users 这种不同路径?
res.end('user route');
}
});
server.listen(3000);
首先说下你之前拿不到 ID 的原因:直接用
startsWith判断只能知道请求来了,但没把 URL 解析成可用的部分。我给你两种方案,从简单到稍复杂,看你需求。
方案一:简单版,手动解析路径
运行后试试这些请求:
curl http://localhost:3000/api/users
curl http://localhost:3000/api/users/123
这种方式能跑,但缺点是所有逻辑堆在一起,路径判断一多就乱了。
方案二:进阶版,模块化路由系统
我给你写一个轻量级的路由框架,支持参数匹配和文件拆分:
先创建项目结构:
运行后测试:
关键点解释一下:
路由参数解析的原理是把
/api/users/:id转换成正则^/api/users/([^/]+)$,然后用正则匹配 URL,捕获组里的内容就是参数值。:id中的 id 会作为参数名存