Express路由疑问:为何users.js中用router.get('/')而非router.get('/users')
关于Express路由挂载路径的解释
嗨,这个问题其实是Express里**路由挂载(Router Mounting)**的核心设计,我来给你讲明白为啥要这么写~
首先,你要理解app.use('/users', users)这行代码的作用:它相当于给整个users路由模块里的所有路由,统一加上了一个路径前缀/users。也就是说,users.js里定义的路由路径,都会自动和这个前缀拼接在一起,形成最终的访问路径。
举个具体的例子:
- 你在
users.js里写router.get('/'),最终匹配的实际路径是/users/(Express还会自动兼容不带末尾斜杠的/users请求) - 如果以后你在
users.js里加一条router.get('/profile'),那实际访问路径就是/users/profile
这种设计的好处太明显了:
- 模块化维护更方便:路由模块只需要关注自己的子路径逻辑,不用重复写相同的前缀。比如哪天你想把用户相关的路径从
/users改成/members,只需要修改app.js里的挂载路径,不用去users.js里改每一条路由 - 路由职责更清晰:每个路由模块只负责自己业务域内的路径,代码结构更清爽
回到你的代码:app.js里的app.use('/users', users)是“父路径”,users.js里的router.get('/')是这个父路径下的“子路径”,两者组合起来才是完整的访问路径。要是你在users.js里写成router.get('/users'),那最终路径就会变成/users/users,反而不是你想要的结果啦!
你可以启动服务测试一下:访问http://localhost:3000/users(假设你的服务端口是3000),就能触发users.js里的那个路由处理函数,这样就能直观感受到这个机制的作用了。
内容的提问来源于stack exchange,提问作者Osiris
相关产品推荐
相关产品推荐

