我有一个使用MEAN的简单REST API。它是在Heroku上托管的,一切都很好用。但是,如果我尝试在localhost上运行它,我会收到以下错误:
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)
知道发生了什么事吗?非常感谢。
编辑:这是连接到Mongo的代码:
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 :(得分:0)
很难说没有看到一些代码。
也就是说,从错误消息中可以看出,您没有传递有效的URL来连接到您的mongodb。
编辑:
是的,所以根据您的代码,检查process.env.MONGODB_URI
的值。您可以通过heroku帐户或cli或console.log
执行此操作,但我打赌它未设置在您的heroku应用程序上。根据您使用的Mongo插件,它们使用不同的环境变量名称。
答案 1 :(得分: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应该可以正常工作。
现在,您的代码在开发和生产中都可以正常工作。
答案 2 :(得分:0)
也许dotenv模块对您有用: