繁体   English   中英

为什么节点`https.get`请求不能在`heroku local`上工作,而在部署时能工作?

[英]Why won't Node `https.get` request work on `heroku local` but work when deployed?

我有一个自己编写的Node.js应用程序,并已通过Bash成功部署到了Heroku应用程序。 从我在家中运行Ubuntu的计算机上,它在本地也可以正常运行。

但是,我刚刚将存储库克隆到Windows机器上,并且当我成功地将更新推送到Heroku远程服务器时,只要我从Windows运行heroku local并尝试访问本地版本(localhost:5000),该更新就可以正常工作,该页面出现错误,我的命令行返回TypeError: Request path contains unescaped characterslayer.js:95.5

该应用程序使用https.get ,这似乎是本地的问题所在。

我不愿意尝试修改我的代码,因为它可以在Heroku上正常工作,也可以在我的Ubuntu计算机上正常工作-因此只能假定需要在Windows计算机上进行配置。

知道可能是什么问题吗?

tl; dr

注意在Heroku中为config / .env选择的变量键。 Windows有一些保留键(例如userpath ),这意味着尝试根据这些键设置自己的值将不起作用。


细节

事实证明,问题出在我选择的.env文件中使用的变量名。

当您有不想提交到存储库的数据(在我的情况下,是我的帐户的身份验证密钥和详细信息)时,可以将它们作为“ config vars”添加到Heroku中- key=value对,Heroku保持分隔到您的代码,以便您可以根据需要对版本库进行版本控制和共享,其他人可以添加自己的详细信息。

但是,在本地使用工具栏上的heroku local命令运行Heroku时,这些变量需要来自其他地方。 Heroku的帮助建议在名为.env的文件.env它们设置为key=value对(然后可以将其添加到.gitignore以防止意外提交。

不幸的是,就我而言,导致问题的原因是我选择了.env中的可变键。 我已经在名为userpath变量上创建了依赖项,但这些依赖项似乎在Windows上已保留,并且具有特殊用途,因此无法被.env文件中的内容覆盖。 这就是为什么在我的Ubuntu计算机上对我有用的东西不能在Windows上直接工作的原因。

您可以通过在Windows计算机上从Node调用console.log( process.env.userprocess.env.path )来查看实际情况。

现在,我已经将变量名更改为非保留的heroku local可以正常工作了。 通过node命令调用程序仍然无法进行,因为它没有设置为从.env以Heroku形式获取变量。

希望这对其他人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM