簡體   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