2016-08-23 87 views
0

所以我正在努力,雖然從Manning獲得意思書,並遵循第5章中的步驟我試圖在Mongolab上使用數據庫作爲Heroku的附加組件。當我運行這段代碼(本地和在Heroku)返回此錯誤:MongoError:getaddrinfo ENOTFOUND undefined undefined:27017

MongoError: getaddrinfo ENOTFOUND undefined undefined:27017

這是我當前的代碼:

var mongoose = require('mongoose'); 

var dbURI = "mongodb://localhost/loc8r"; 
if (process.env.NODE_ENV === 'production') { 
    dbURI = process.env.MONGOLAB_URI; 
} 
mongoose.connect(dbURI); 

疑難解答我從終端與啓動應用程序

NODE_ENV=production MONGOLAB_URI=/*my mongo uri here*/ 

與它在本地運行良好。所以我不確定問題來自哪裏。有關排除列出的錯誤的任何建議?

回答

1

所以我不確定這個過程的哪一部分解決了這個問題,但我完全刪除/刪除了Heroku中的mongolab插件。然後,我重新添加了它,並使用相同的代碼執行了相同的確切步驟,並且工作正常!

感謝所有幫助過我的人!

0

這看起來正確。之前我也看到過這個錯誤(很多)。 'undefined undefined'我相信你的環境變量是未定義的。嘗試控制檯記錄你的環境變量,以確保它們是有效的。

+0

所以我控制檯登錄我的環境,並將其推到heroku,它輸出'生產'這似乎很好。所以我猜這個錯誤是由於某種原因使用'process.env.MONGOLAB_URI'所致。 – txnnxr

+0

看看下面的對話,對於MONGOLAB_URI作爲傳統來說,Pneumee是完全正確的。我忘記了這一點,MONGODB_URI就是你想要用作你的Heroku env變量的東西。 但是,對於本地測試,這應該不重要,因爲您只是爲自己創建和提供變量。 您是否在使用Nodemon來啓動您的應用程序?你用來啓動的確切命令是什麼? 對於調試,也嘗試添加 console.log('DB URI:'+ process.env。MONGOLAB_URI); 在這個文件的某個地方,所以你可以很容易地監視它。 – Adam

3

我認爲你沒有提供mongoDB所需的PORT NO.

請與本地主機一起給port no.(27017)

試試這個:

var dbURI = "mongodb://127.0.0.1:27017/loc8r"; 

getaddrinfo ENOTFOUND意味着客戶端無法連接到指定的地址。請嘗試使用上述地址。

我希望這可以幫助。

+0

它在本地運行良好。問題是當它嘗試使用'MONGOLAB_URI'時 – txnnxr

1

爲mLab加載項創建的Heroku環境變量被稱爲MONGODB_URIMONGOLAB_URI可能是遺留問題)。

+0

我試圖改爲'MONGODB_URI',但它仍然輸出相同的錯誤 – txnnxr

+0

什麼是'當鼬試圖連接時設置'dbURI'? (顯然屏蔽或更改連接字符串中的任何敏感信息 - 格式是我感興趣看到的)。 – pneumee

+0

嗯,我沒有想過要檢查......它以「undefined」的形式出現。這肯定是問題所在,但是看看其他人的設置我不知道爲什麼'process.env.MONGOLAB_URI'沒有返回上述代碼中的任何東西 – txnnxr

0

爲mLab加載項創建的Heroku環境變量稱爲MONGODB_URI(MONGOLAB_URI可能是遺留問題)。(pneumee)

這解決了我的問題。