Express路由失效:请求无法访问question路由始终跳转首页
问题原因及解决方案
核心问题分析
请求/question时触发index路由而非预期的question路由,主要有以下几类原因:
1. 路由挂载实例搞混(最可能)
你贴出的app.js代码里路由挂载逻辑是正确的:
app.use('/question', questionRouter); app.use('/', indexRouter);
但如果实际代码中把两个Router实例的挂载路径写反(比如写成app.use('/question', indexRouter)和app.use('/', questionRouter)),就会导致请求/question时进入indexRouter的根路由(router.get('/', index.index)),从而打印index2 page。
2. questionRouter路由未生效
如果routes/question.js存在以下问题,会导致路由无法匹配请求:
- 路由方法写错(比如用
router.post('/'...)而非router.get('/'...)); - 控制器引入错误(比如写成
let question = require('../controllers/index'),导致question.question不存在); - Router实例未正确导出(比如写成
module.exports = indexRouter而非自身的router)。
3. 控制器代码抛出异常
你的controllers/question.js中写了return response;,但response是未定义变量,执行时会抛出ReferenceError。若项目未配置错误处理中间件,Express可能跳过该路由继续向下执行,但这种情况通常返回500错误,而非触发index路由——除非有额外重定向逻辑将请求转到/。
解决方案
按以下步骤排查修复:
- 核对app.js路由挂载:确保
app.use('/question', questionRouter)在app.use('/', indexRouter)之前,且两个Router实例未搞混; - 检查questionRouter定义:确认routes/question.js中路由方法为
router.get('/', question.question),控制器引入路径正确,且module.exports = router; - 修正控制器代码:将controllers/question.js里的
return response;改为正确的响应语句,例如:exports.question = function (req, res, next) { console.log('question page'); res.send('question page'); // 或res.render('question')等符合业务逻辑的响应 }
内容的提问来源于stack exchange,提问作者Manu Chadha
相关产品推荐
相关产品推荐

