无法访问根目录外页面的Express路由问题求助
页面链接点击报错问题
我点击页面链接时遇到错误,现有两个href链接:
<li class="nav-item"> <a class="nav-link" href="/">Home</a> </li> <li class="nav-item"> <a class="nav-link" href="../pages/addUser">New member</a> </li>
路由文件memberRoutes.js代码:
const express = require('express'), router = express.Router(), member = require('../controllers/members') router.get('/', member.addUser); module.exports = router;
控制器文件member.js代码:
exports.addUser = ('/addUser', (req, res) => { res.render('../views/pages/addUser'); });
我试过把控制器里的路径改成'/',也试过把链接改成<a class="nav-link" href="/addUser">New member</a>,但点击原链接时会报错Cannot GET /addUser。根目录的Home链接能正常访问,但根目录外的页面都打不开,项目文件结构大致如下:
- 项目根目录
- controllers
- members.js
- routes
- memberRoutes.js
- views
- pages
- addUser(模板文件)
- index(Home页面模板)
- pages
- app.js(主入口文件)
- controllers
问题解决步骤
1. 修复控制器写法错误
控制器里的addUser写法不符合Express规范,不能在导出函数里指定路径,路径应该交给路由配置。修正后的member.js:
exports.addUser = (req, res) => { // Express会自动从views目录开始查找模板,简化路径 res.render('pages/addUser'); };
2. 调整路由与挂载配置
两种可选方案:
方案一:路由用相对路径,挂载时指定前缀
memberRoutes.js保持不变:
const express = require('express'), router = express.Router(), member = require('../controllers/members') router.get('/', member.addUser); module.exports = router;
在主入口app.js里挂载路由时添加前缀:
const memberRoutes = require('./routes/memberRoutes'); // 挂载后,路由里的/就对应网站的/addUser路径 app.use('/addUser', memberRoutes);
方案二:路由直接写完整路径
修改memberRoutes.js:
const express = require('express'), router = express.Router(), member = require('../controllers/members') // 直接指定/addUser路径 router.get('/addUser', member.addUser); module.exports = router;
在app.js里挂载到根路径:
const memberRoutes = require('./routes/memberRoutes'); app.use('/', memberRoutes);
3. 修正前端链接
前端统一用绝对路径,避免相对路径的层级问题:
<li class="nav-item"> <a class="nav-link" href="/addUser">New member</a> </li>
4. 验证模板路径
确保views/pages/addUser对应的模板文件存在(比如addUser.ejs或你使用的模板引擎后缀),Express会自动识别。
内容的提问来源于stack exchange,提问作者user1960836
相关产品推荐
相关产品推荐

