如何在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
相关产品推荐
相关产品推荐

