【发布时间】:2021-04-04 10:47:00
【问题描述】:
如果这不是正确的做法,我深表歉意。我在这个问题上花了 4 天时间,最终想出了一个解决方案,如果其他人遇到这个问题,我想发布这个可能的解决方案。
我正在运行一个带有 React 客户端的 Node.js 服务器,这里是文件夹结构的图像供参考。
我在 package.json 中使用 postbuild 脚本在 heroku 上构建我的项目
出于我无法理解的原因,以下 GET catch all 语句
app.get("*", (req, res) => {
res.sendFile(path.resolve(__dirname, "client", "build", "index.html"))
});
路径返回 '/app/src/client/build/index.html' 这是不正确的路径,因为您的应用程序托管在 /app/client/build/index.html 我必须编辑我的 GET catch all 语句到以下。
app.get("*", (req, res) => {
res.sendFile(path.resolve("client", "build", "index.html"));
});
它现在可以正确重定向到我的索引文件并且应用程序可以正常工作。就像我说的不幸的是,我无法说明为什么 __dirname 没有指向正确的文件夹,所以如果有人能阐明这一点,那就太好了。
此外,解决方案的稳健性可能是一个问题,因为如果 Heroku 更改文件结构,GET catch all 语句可能会中断。
【问题讨论】: