所以我试图在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
中一直到尝试捕获结束,因此weatherData
和pixabayData
都没有更新。
其次,也有可能这些调用是成功的,但所需的数据不在结果中,即这两个if语句都不为真:
if('city_name' in data) {`
...
if('hits' in data) {
同样,在这种情况下,weatherData
和pixabayData
都没有被更新。
按照/sendFormData
处理程序的编写方式,它不会检查callApi
是否真的得到了任何有用的数据,只是检查它是否已经完成了执行。因此,尽管数据对象仍然是空的,但代码流仍以其愉快的方式继续。
然而,这里有一个更大的、无关的设计缺陷:如果不止一个人使用你的网站,会发生什么?您的客户端代码调用/sendFormData
,希望它能正确填充全局变量weatherData
和pixabayData
,然后分别调用/getData
来尝试检索这些数据。
然而,问题是,在您的客户端调用/sendFormData
和/getData
之间,使用您网站的任何其他人都可以单独调用/sendFormData
,并将全局变量中包含的数据从搜索结果更改为搜索结果。所以你会得到他们的搜索结果,而不是你的,因为他们的结果会覆盖你在服务器上的结果。您需要在单个事务中处理获取API结果并将其发送回请求者。
(回复:所有本地Heroku配置,如果不干扰您的本地计算机,很难回答,对不起。(