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

无法访问根目录外页面的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页面模板)
    • app.js(主入口文件)

问题解决步骤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:50:38