Node.js+EJS动态展示PDF报错:Cannot GET文件路径求助
解决Express+EJS动态展示PDF的Cannot GET错误
核心问题:静态资源路径前缀错误
你在app.js里已经将Documente文件夹注册为静态资源目录:
app.use(express.static(path.join(__dirname, 'Documente')));
这意味着Express会把Documente文件夹下的文件直接暴露在网站根路径(/)下,而非嵌套在/Documente/路径下。你在JS里设置的iframe.src多了一层不必要的前缀,导致服务器找不到对应文件。
修复方案
方案1:修改前端路径(推荐)
直接移除EJS代码中路径里的Documente前缀:
<script> const btnUnu = document.getElementById("eicunu"); const btnDoi = document.getElementById("eicdoi"); var iframeEl = document.getElementById("iframe"); btnUnu.addEventListener("click", toggle) btnDoi.addEventListener("click", toggleDoi) function toggle(){ iframeEl.src = "/S231202-2.pdf" } function toggleDoi(){ iframeEl.src = "/S291040.pdf"; } </script>
方案2:给静态资源添加路径前缀(保留原前端代码)
如果你希望URL里保留/Documente/前缀,修改app.js中的静态资源注册代码,添加路径映射:
// 给静态资源绑定/Documente路径前缀 app.use('/Documente', express.static(path.join(__dirname, 'Documente')));
修改后原EJS代码无需改动,服务器会自动将/Documente/xxx.pdf映射到Documente文件夹下的对应文件。
额外验证步骤
- 确认
Documente文件夹和app.js处于同级目录 - 检查PDF文件名:大小写、后缀(必须是
.pdf)、无多余空格或特殊字符,确保和代码中的完全一致 - 重启Express服务器后,可通过浏览器直接访问
http://localhost:3030/S231202-2.pdf(或带前缀的路径),验证文件是否能正常加载
内容的提问来源于stack exchange,提问作者Daniel Teresneu
相关产品推荐
相关产品推荐

