![](/img/trans.png)
[英]Node.js https request work locally but throws timeout when deployed to heroku
[英]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 characters
和layer.js:95.5
。
该应用程序使用https.get
,这似乎是本地的问题所在。
我不愿意尝试修改我的代码,因为它可以在Heroku上正常工作,也可以在我的Ubuntu计算机上正常工作-因此只能假定需要在Windows计算机上进行配置。
知道可能是什么问题吗?
注意在Heroku中为config / .env
选择的变量键。 Windows有一些保留键(例如user
和path
),这意味着尝试根据这些键设置自己的值将不起作用。
事实证明,问题出在我选择的.env
文件中使用的变量名。
当您有不想提交到存储库的数据(在我的情况下,是我的帐户的身份验证密钥和详细信息)时,可以将它们作为“ config vars”添加到Heroku中- key=value
对,Heroku保持分隔到您的代码,以便您可以根据需要对版本库进行版本控制和共享,其他人可以添加自己的详细信息。
但是,在本地使用工具栏上的heroku local
命令运行Heroku时,这些变量需要来自其他地方。 Heroku的帮助建议在名为.env
的文件.env
它们设置为key=value
对(然后可以将其添加到.gitignore
以防止意外提交。
不幸的是,就我而言,导致问题的原因是我选择了.env
中的可变键。 我已经在名为user
和path
变量上创建了依赖项,但这些依赖项似乎在Windows上已保留,并且具有特殊用途,因此无法被.env
文件中的内容覆盖。 这就是为什么在我的Ubuntu计算机上对我有用的东西不能在Windows上直接工作的原因。
您可以通过在Windows计算机上从Node调用console.log( process.env.user
, process.env.path
)来查看实际情况。
现在,我已经将变量名更改为非保留的heroku local
可以正常工作了。 通过node
命令调用程序仍然无法进行,因为它没有设置为从.env
以Heroku形式获取变量。
希望这对其他人有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.