2017-04-09 98 views
0

我有一個簡單的使用MEAN的REST API。它在Heroku上託管,並且一切正常。但是,如果我嘗試在本地主機上運行它,我會收到以下錯誤:節點應用程序在Heroku上運行,但不在本地主機上運行

TypeError: Parameter "url" must be a string, not undefined 
at Url.parse (url.js:81:11) 
at Object.urlParse [as parse] (url.js:75:5) 
at module.exports (/Users/ricardotaboada/Desktop/sbackend/node_modules/mongodb/lib/url_parser.js:15:23) 
at connect (/Users/ricardotaboada/Desktop/sbackend/node_modules/mongodb/lib/mongo_client.js:403:16) 
at Function.MongoClient.connect (/Users/ricardotaboada/Desktop/sbackend/node_modules/mongodb/lib/mongo_client.js:227:3) 
at Object.<anonymous> (/Users/ricardotaboada/Desktop/sbackend/server.js:15:21) 
at Module._compile (module.js:571:32) 
at Object.Module._extensions..js (module.js:580:10) 
at Module.load (module.js:488:32) 
at tryModuleLoad (module.js:447:12) 

任何想法發生了什麼?非常感謝。

編輯:這裏是連接到蒙戈代碼:

mongodb.MongoClient.connect(process.env.MONGODB_URI, function (err, database) { 
if (err) { 
console.log(err); 
process.exit(1); 
} 

sbrdcontroller = new controller(database); 
console.log("Database connection ready"); 

// Initialize the app. 
var server = app.listen(process.env.PORT || 3000, function() { 
var port = server.address().port; 
console.log("App now running on port", port); 


    }); 
}); 

回答

0

硬盤沒有看到一些代碼來表示。

這就是說,從錯誤消息中,它聽起來像你沒有通過一個有效的URL來連接到你的mongodb。

編輯:

對,所以根據你的代碼,檢查process.env.MONGODB_URI值。您可以通過您的heroku帳戶或cli或console.log來完成此操作,但我認爲它沒有設置在您的heroku應用程序中。根據您使用的Mongo插件,它們使用不同的環境變量名稱。

0

process.env.MONGODB_URI在您的本地環境中是未定義的,這就是錯誤被拋出的原因。

數據庫連接的代碼之前添加以下代碼:

var development = process.env.NODE_ENV !== 'production'; 

var mongo_url; 

if (development) { 
    mongo_url = 'mongodb://localhost:27017/mydb'; 
} 
else { 
    mongo_url = process.env.MONGODB_URI; 
} 

然後改變:

mongodb.MongoClient.connect(process.env.MONGODB_URI, function (err, database) { 

要:

mongodb.MongoClient.connect(mongo_url, function (err, database) { 

假設你的本地Mongo的數據庫端口沒有改變,帶端口27017的本地URL應該可以正常工作。

現在你的代碼在開發和生產中都可以正常工作。

相關問題