部署通过 expressjs 提供的反应应用程序时出现内部服务器错误 403

Posted

技术标签:

【中文标题】部署通过 expressjs 提供的反应应用程序时出现内部服务器错误 403【英文标题】:Internal server error 403 on deploying react app served via expressjs 【发布时间】:2021-08-29 20:10:13 【问题描述】:

我正在尝试使用 expressjs 提供构建反应应用程序。构建反应应用程序,并使用我的 expressjs 提供 index.html

app.use('/', express.static('reactapp/build'))

应用程序很简单。它包含许多卡片,当按下它们时会导航到改变路线的另一个页面。在点击之前,假设是 localhost:3000/lists,点击任何卡片后,它会路由到 localhost/lists/1,其中 1 是一个 id。现在,当我在按下任何一张卡片后尝试刷新页面时,我得到“找不到路径的处理程序”(因为我想它是客户端 url,而不是由 express 处理)。最后一个 app.use 被触发。

app.use((req, res) => 
            res.status(404).json(message: `No handler for $req.url`, requestHost: req.baseUrl)
        )

因此,我所做的是,我将 index.html 发送到这个中间件部分来解决我的问题。

app.use((req, res) => 
                res.sendFile(path.join(__dirname,"..\\reactapp\\build","index.html"));
            )

它在本地解决了问题,但部署后我得到“状态代码 403 的内部服务器错误”。我不知道问题是什么。根据一个站点:403(禁止)状态码表示服务器理解请求但拒绝授权......如果请求中提供了身份验证凭据,则服务器认为它们不足以授予访问权限。

有人可以帮我吗?我对 expressjs 不太熟悉,所以我想知道可能是什么原因。

【问题讨论】:

【参考方案1】:

res.sendFile(path.join(__dirname,"..\reactapp\build","index.html")); 设置路径的方式,不适用于 linux 机器。可能是这个原因。

【讨论】:

以上是关于部署通过 expressjs 提供的反应应用程序时出现内部服务器错误 403的主要内容,如果未能解决你的问题,请参考以下文章

如何通过节点 expressjs 从 s3 提供静态网站?

如何通过 https 提供内容

在 expressjs 中提供带有响应对象的 HTML 文件时,如何包含外部 JavaScript 文件?

部署反应前端时如何注入 API 服务器 URL?

npm 错误!缺少脚本:将反应应用程序部署到heroku时构建

部署的反应Web应用程序需要硬刷新