我正在自学使用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。我想在我的第一个学习项目中尽可能地保持简单。
1条答案
按热度按时间tct7dpnv1#
我通过在前端使用这行代码来解决它:
字符串
并在Heroku中使用新的ENV变量设置CORS
可能不是最好的做法这样做,但至少现在它的工作!