You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Express.js中把根路径GET请求重定向到控制器路由?

解决Express中根路径重定向到MVC控制器路由的问题

嘿,我来帮你搞定这个复刻Sinatra功能的问题!你现在的核心问题是控制器里的路由没有正确挂载到主Express应用上,咱们一步步来修正:

第一步:重构search控制器的路由写法

你之前在controllers/search.js里新建了一个独立的app实例,这和主app是完全隔离的,主应用根本识别不了它的路由。换成Express的Router来定义模块化路由才是MVC的正确姿势:

// controllers/search.js
const express = require('express');
// 创建Router实例代替新的app
const router = express.Router();

// 这里定义的是/search路径下的根路由(对应访问 /search)
router.get('/', function(req, res) {
  // 这里写你的搜索页面逻辑,比如渲染视图:
  // res.render('search');
  res.send('欢迎来到搜索页面!');
});

// 导出这个Router实例,让主app可以挂载它
module.exports = router;

第二步:在主app中挂载search路由

修改你的app.js,引入search控制器的路由并挂载到/search路径下:

// app.js
const express = require('express');
const app = express();

// 引入search控制器的路由模块
const searchRouter = require('./controllers/search');

// 将search路由挂载到/search路径
// 这样所有以/search开头的请求都会交给searchRouter处理
app.use('/search', searchRouter);

// 根路径重定向到/search,和你原来的写法一致,现在可以正常工作了
app.get('/', function(req, res) {
  res.redirect('/search');
});

// 启动服务器示例
app.listen(3000, () => {
  console.log('服务器运行在 http://localhost:3000');
});

为什么这样能行?

  • Router是Express专门用来做模块化路由的工具,每个控制器可以用它定义自己的路由规则,然后通过app.use()挂载到主应用的指定路径下,完美契合MVC的分层思想。
  • 现在访问根路径/时,会被重定向到/search,而这个路径已经被挂载到search控制器的路由上,就能正确触发你写的搜索页面逻辑了。

内容的提问来源于stack exchange,提问作者A. Cam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:15:43