【问题标题】:Why won't Node `https.get` request work on `heroku local` but work when deployed?为什么 Node `https.get` 请求不能在 `heroku local` 上工作,但在部署时工作?
【发布时间】:2016-01-20 07:48:53
【问题描述】:

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

知道可能是什么问题吗?

【问题讨论】:

  • 在您的代码中,您是否获得了文件夹的绝对路径或类似的东西? Windows 的路径使用“\”而不是“/”,这可能是问题所在,或者路径中某处有空格。 layer.js:95.5 的代码是什么?
  • @ShanShan 感谢您的回复。 /layer.js 行看起来像是 Express 包的一部分。我认为可靠的https.get 在某些 Express 路由中。我刚刚通过直接节点(而不是heroku local)运行代码并得到了同样的错误。关于 Windows 路径的观点很有趣,但它不会影响 API 调用吗?
  • 嗡嗡声:github.com/strongloop/express/issues/2511 你的路线是否包含任何特殊字符?或者文件夹有一个奇怪的名称? T 不这么认为,因为它适用于 ubuntu,但我仍然在问。我认为很难确定问题的根源。
  • 谢谢。问题原来是别的东西,但我真的很感谢你的努力。我已经在下面发布了答案。如果您对此感兴趣并且我的回答中的任何内容都没有意义,请告诉我,我会更新。

标签: node.js git bash heroku https


【解决方案1】:

tl;博士

请注意您在 Heroku 中为 config/.env 选择的变量键。 Windows 有一些保留键(如 user 和 path),这意味着尝试针对这些键设置您自己的值是行不通的。


细节

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

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

当在本地运行 Heroku 但使用工具带中的heroku local 命令时,这些变量需要来自其他地方。 Heroku 的帮助建议在名为 .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 获取变量。

希望这对其他人有所帮助。

【讨论】:

  • 很高兴知道 :) Windows PATH 变量中充满了\ 和;,所以难怪 Express 拒绝加载它。但是,我在 Win10 上尝试过,user 似乎不是保留名称。
  • 可以在工作机器上进行设置。我看到的user 值是用于登录整个组织帐户的用户名。这对每个人来说可能都不是问题,但出于我的目的,我不得不避免它。
猜你喜欢
  • 2020-08-23
  • 2012-04-30
  • 2020-12-20
  • 2021-04-26
  • 2023-03-03
  • 1970-01-01
  • 2023-01-11
  • 2022-01-15
  • 1970-01-01
相关资源
最近更新 更多