我在 Heroku 中运行一个简单的测试站点时遇到问题。由于某种原因,当我希望它从 /build/ 提供服务时,它试图从 /app/build/ 提供内容。
错误:ENOENT:没有这样的文件或目录,stat '/app/build/index.html'
I read here https://stackoverflow.com/questions/31527462/error-enoent-stat-app-public-views-index-html-in-heroku不要在 Express 应用程序中使用 __dirname,因为 Heroku 将其设置为 /app 并且我应该使用 process.cwd();
process.env.PWD = process.cwd();
但这没有用。下面是我的 server.js Express 应用程序和文件夹结构
const path = require('path');
const express = require('express');
const port = process.env.PORT || 8080;
const app = express();
process.env.PWD = process.cwd();
app.use(express.static(process.env.PWD + '/build'));
app.get('*', function (req, res) {
const index = path.join(process.env.PWD, '/build/index.html');
res.sendFile(index);
});
app.listen(port);
console.log('server_started');
首先,不要使用 PWD。只需使用 __dirname 即可。它在 Heroku 上的工作原理与在其他地方的工作原理完全相同。例如,如果您从非本地目录执行二进制文件,则使用 PWD 会使您的应用程序更加脆弱。
其次,该文件在 Heroku 上不存在的原因可能是因为您已将其添加到 .gitignore 文件中,或者通常没有将其签入 git 中。您可以从编辑器的颜色编码中看到这一点 - 签入 git 的所有文件都是白色的,忽略的文件是灰色的(例如 node_modules 目录和 build/bundle)。您的索引文件是红色的(不像签入的文件那样是白色的)。所以当你git push heroku master
,您引用的那些文件不存在。
最后,ENOENT 说 /app/build 的原因只是因为 Heroku 上的 root/home 目录是 /app。切勿构建锁定在绝对文件结构中的应用程序;只需使用相对路径(否则,如果您将应用程序移动到本地计算机上的另一个目录,您的应用程序将会崩溃)。
app.get('*', function (req, res) {
const index = path.join(__dirname, 'build', 'index.html');
res.sendFile(index);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)