如何在Heroku上的vanilla前端应用程序中设置正确的后端URL

koaltpgm  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(102)

我正在自学使用Nodejs进行全栈开发。我从一个非常简单的(没有框架)前端,express后端和postgres数据库开始。前端和后端都在同一个repo中(为了保持简单)。这是:https://github.com/mytzenka/skribblewords
我在本地的一切工作都很好(在Docker中运行postgres)。我有一个本地.env文件,它只包含数据库连接字符串。Heroku有这个相同的变量来提供 its 数据库连接字符串。
但是我在部署到Heroku时遇到了问题。部署工作正常。后端成功启动并连接到数据库(感谢Heroku的env变量)。当我在部署后转到实时URL时,前端也是可见的。
前端由后端app.js提供服务,如下所示:

app.get('*', (req, res) => {
res.sendFile(`${__dirname}/client/index.html`)})

字符串
然而,我无法弄清楚如何在部署后正确设置后端的URL-现在在我的前端代码中硬编码为localhost。实时URL由Heroku自动生成,每次重启后都会有所不同。我在Heroku Jmeter 板中找不到环境变量,即使有,我也不知道如何加载它,因为下面的代码在我的前端代码中不起作用。

require('dotenv').config();


这现在在我的前端index.js代码中,显然需要在部署后进行更改。

const baseUrl = "http://localhost:3000" //TODO <-- HOW TO SET THIS WHEN DEPLOYED TO HEROKU?


我也有关于CORS的反向问题。在部署到Heroku之后,如何让后端知道在app.js中放置什么?

const corsOptions = {
    origin: 'http://localhost:3000',  //TODO <-- HOW TO SET THIS WHEN DEPLOYED ON HEROKU (WHEN NEEDED)?
    optionsSuccessStatus: 200
};
app.use(cors(corsOptions));


是的,我已经在谷歌上搜索答案了。不幸的是,我发现的几乎所有例子都是基于React的,太复杂了,我的菜鸟大脑无法理解。我还不想使用React。我想在我的第一个学习项目中尽可能地保持简单。

tct7dpnv

tct7dpnv1#

我通过在前端使用这行代码来解决它:

const baseUrl = `${window.location.protocol}//${window.location.hostname}:${window.location.port}`

字符串
并在Heroku中使用新的ENV变量设置CORS
可能不是最好的做法这样做,但至少现在它的工作!

相关问题