2017-04-09 99 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应该可以正常工作。

现在你的代码在开发和生产中都可以正常工作。

相关问题