
ejs 文件本身不可直接链接,必须通过 express 路由定义 url 端点,再在模板中链接到该 url;否则点击导航将返回 404 错误。
ejs 文件本身不可直接链接,必须通过 express 路由定义 url 端点,再在模板中链接到该 url;否则点击导航将返回 404 错误。
在 Express + EJS 开发中,一个常见误区是试图像静态 HTML 那样直接通过 或 跳转到另一个 .ejs 文件——这是无效的。EJS 是服务端模板引擎,它不提供文件直访能力,而是依赖路由(Route)驱动渲染逻辑。
✅ 正确做法:先定义路由,再链接 URL
你需要在 Express 应用中显式声明一个处理 /cart 请求的路由,并指定其渲染 cart.ejs:
// app.js 或路由文件中
app.get('/cart', (req, res) => {
res.render('cart'); // 自动查找 views/pages/cart.ejs(因你设置了 views 目录为 'views/pages')
});
⚠️ 注意路径匹配:
- res.render('cart') 会按 app.set('views', path.join(__dirname, 'views/pages')) 查找 views/pages/cart.ejs;
- 若你的 cart.ejs 实际位于 views/pages/cart.ejs,则上述写法完全正确;
- 若文件在 views/cart.ejs(即未嵌套在 pages 子目录),则需调整 app.set('views', ...) 或使用相对路径 res.render('pages/cart')。
? 在 index.ejs 中正确链接
在 index.ejs 的导航栏中,应链接到 已定义的 URL 路径(不是文件名或文件扩展名):
<!-- views/pages/index.ejs -->
<nav><ul>
<li><a href="/">Home</a></li>
<li><a href="/cart">Cart</a></li> <!-- ✅ 正确:指向路由路径 /cart -->
</ul></nav>
? 排查 404 的关键步骤
- 检查浏览器地址栏:点击“Cart”后,地址栏显示的是 http://localhost:3000/cart 还是 http://localhost:3000/cart.ejs?后者说明链接写错(加了 .ejs);
- 确认路由已注册:确保 app.get('/cart', ...) 在 app.listen() 之前执行,且无拼写错误(如 /carrt);
- 验证文件位置与命名:views/pages/cart.ejs 必须真实存在,且文件名大小写严格匹配(Linux/macOS 区分大小写);
- 避免静态资源干扰:express.static() 只服务于 public/ 下的静态文件,不会影响 /cart 这类动态路由。
? 补充建议
- 使用命名路由或中间件统一管理路径,提升可维护性;
- 开发时启用 Express 的 console.log 日志(如 app.use((req, res, next) => { console.log(req.method, req.url); next(); }))快速定位请求是否到达;
- 对于需要传参的页面(如 /cart?item=abc),可在路由中解析 req.query 并传递给模板:
app.get('/cart', (req, res) => { res.render('cart', { items: req.query.item ? [req.query.item] : [] }); });
记住:EJS 是视图层,路由是控制器层——链接的是 URL,不是文件。 理清这一职责分离,就能彻底规避 “Cannot GET /cart” 类错误。











