如何为NodeJS Express应用程序设置Heroku端口



所以我试图在Heroku上托管我的网站,并设置一切以启动和运行我的应用程序。每当我试图提交表格时,我都会遇到未定义的错误。

未定义错误控制台错误

我已经将其设置为使用文档中所示的端口:

app.listen(process.env.PORT || 8081, function () {
console.log('Example app listening on port 8081!');
});

当使用heroku local web在本地启动应用程序时,我会得到类型错误:无法获取和未定义的结果,但当我进入.env文件并添加port=8081时,它运行得非常好。效果良好

当我用heroku open打开它时,我仍然有那个未定义的问题。

我真的不需要在.env中设置PORT,对吗?还是我?我读到标准端口是80,但这也不起作用。

有人能帮帮我吗?非常感谢。

以下是公共网站的链接:https://shrouded-everglades-61993.herokuapp.com/这里是我的Github代表的链接:https://github.com/stefanfeldner/capstone-travel-app

所以它们未定义的原因是它们是由main.js:中的这些行设置的

uiData.imageURL = data[1].imageUrl;
...
uiData.iconCode = data[0].iconCode;

其中,data是要从/getData端点检索的对象。问题是/getData实际返回的是[{}, {}],所以这些值当然都是undefined,这导致了视觉上的破碎。

那么,为什么/getData会返回这些空对象呢?我无法查看您的服务器日志,但根据server.js的编写方式,有两种明显的可能性。

第一种情况是某个地方出现了错误,您根本没有在callApi中一直到尝试捕获结束,因此weatherDatapixabayData都没有更新。

其次,也有可能这些调用是成功的,但所需的数据不在结果中,即这两个if语句都不为真:

if('city_name' in data) {`
...
if('hits' in data) {

同样,在这种情况下,weatherDatapixabayData都没有被更新。

按照/sendFormData处理程序的编写方式,它不会检查callApi是否真的得到了任何有用的数据,只是检查它是否已经完成了执行。因此,尽管数据对象仍然是空的,但代码流仍以其愉快的方式继续。

然而,这里有一个更大的、无关的设计缺陷:如果不止一个人使用你的网站,会发生什么?您的客户端代码调用/sendFormData,希望它能正确填充全局变量weatherDatapixabayData,然后分别调用/getData来尝试检索这些数据。

然而,问题是,在您的客户端调用/sendFormData/getData之间,使用您网站的任何其他人都可以单独调用/sendFormData,并将全局变量中包含的数据从搜索结果更改为搜索结果。所以你会得到他们的搜索结果,而不是你的,因为他们的结果会覆盖你在服务器上的结果。您需要在单个事务中处理获取API结果并将其发送回请求者。

(回复:所有本地Heroku配置,如果不干扰您的本地计算机,很难回答,对不起。(

最新更新