Express JS (Node) 为路由添加前缀功能不生效问题咨询
问题分析
- 路由挂载对象错误:代码中在
apiRouter的中间件回调内给根app实例注册/auth路由,该路由实际挂载在服务根路径下,仅可通过/auth访问,和/api前缀无关联。 - 路由注册时机错误:
apiRouter.use('/api', callback)的回调仅在匹配到/api路径的请求进入时才会执行,首次访问/api/auth时,/auth路由还未完成注册,因此返回404。 - 路由实例未挂载:创建的
apiRouter实例未通过app.use挂载到根应用上,Express默认不会处理该实例下的任何路由。
修复方案
推荐使用挂载Router时指定统一前缀的实现,逻辑更清晰易维护:
const express = require('express'); const app = express(); const apiRouter = express.Router() // 路由实例内仅定义子路由路径 apiRouter.get('/auth', (req, res) => { res.send("Auth route") }) // 挂载路由实例时指定统一前缀,所有子路由自动拼接此前缀 app.use('/api', apiRouter) // 启动服务监听端口 app.listen(3000, () => { console.log('服务运行在3000端口') })
修改完成后访问/api/auth即可得到预期响应。
内容的提问来源于stack exchange,提问作者Wai Yan Hein
相关产品推荐
相关产品推荐

