Heroku部署Node.js服务访问HTML页报ENOENT文件不存在错误如何解决
问题根因
- 最常见原因:
public目录或目录内的文件被.gitignore规则过滤,未提交到git,导致部署到Heroku的应用包内不存在对应文件。本地存在文件不代表已同步到部署环境,可执行heroku run bash进入Heroku实例,执行ls -la /app/public直接验证文件是否存在。 - 大小写不匹配:Windows、macOS系统默认大小写不敏感,本地路径大小写不一致也可正常访问,但Heroku运行环境为大小写敏感的Linux系统,若实际目录/文件名(如
Public、Index.html)和代码中引用的小写路径不一致,就会触发找不到文件的报错。 - 配置文件拼写错误:Heroku要求进程配置文件必须为首字母大写的
Procfile,若你使用小写的procfile会导致进程启动异常,也可能引发路径读取错误。
正确配置方案
首先先清理.gitignore中过滤public目录、.html文件的规则,重新提交所有文件后再部署,代码按如下写法配置即可:
const express = require('express'); const app = express(); const PORT = process.env.PORT || 5000; const path = require('path'); // 托管public目录下所有静态资源,css、js、html文件均可直接访问 app.use(express.static(path.join(__dirname, 'public'))); // 根路径返回index.html app.get('/', (req, res) => { res.sendFile(path.join(__dirname, 'public', 'index.html')); }); app.listen(PORT, () => { console.log(`Listening on ${PORT}`); });
完成配置后,index.html可通过根路径直接访问,home.html可直接通过/home.html路径访问,无需单独配置路由。
内容的提问来源于stack exchange,提问作者user2986042
相关产品推荐
相关产品推荐

