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

时间:2015-10-21 10:43:10

标签: node.js git bash heroku https

我有一个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机器上进行配置。

知道问题可能是什么?

1 个答案:

答案 0 :(得分:1)

TL;博士

请注意您在Heroku中为config / .env选择的变量键。 Windows有一些保留密钥(如userpath),这意味着尝试根据这些密钥设置自己的值将无效。

细节

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

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

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

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

您可以通过从Windows计算机上的Node调用console.log(process.env.userprocess.env.path)来查看此操作。

现在我已将变量名称更改为非保留heroku local的工作正常。通过node命令调用该程序仍然无法正常工作,因为它未设置为从.env获取变量作为Heroku。

希望这有助于其他人。