我正在Heroku上关注这个tutorial建立一个MEAN Stack Contact APP,我遇到了一些奇怪的错误!虽然我的应用程序在部署后工作正常但是当我在本地运行它时,应用程序无法连接到Mongodb。我得到的错误是:
url.js:88 抛出新的TypeError('参数'url“必须是一个字符串,而不是'+ typeof url);
^TypeError:参数“url”必须是字符串,而不是未定义
在Url.parse(url.js:88:11)
在Object.urlParse [as parse](url.js:82:5)
在module.exports(/Users/Ananda/mean-contactlist/node_modules/mongodb/lib/url_parser.js:15:23)
在连接时(/Users/Ananda/mean-contactlist/node_modules/mongodb/lib/mongo_client.js:480:16)
在Function.MongoClient.connect(/Users/Ananda/mean-contactlist/node_modules/mongodb/lib/mongo_client.js:244:3)
在对象。 (/Users/Ananda/mean-contactlist/server.js:17:21)
在Module._compile(module.js:570:32)
在Object.Module._extensions..js(module.js:579:10)
在Module.load(module.js:487:32)
在tryModuleLoad(module.js:446:12)
根据我的理解,当我使用“节点服务器”启动应用程序时,它无法找到mongodb数据库URL ...只是不确定为什么因为它在heroku上运行时发现它很好。我还可以在本地运行此应用程序吗?他们在Github上拥有完整的应用。我也克隆了它,并尝试在本地运行它并收到错误。为什么部署时有效但不在本地?
答案 0 :(得分:3)
那是因为mongo客户端正在使用在远程服务器中定义但不在本地定义的环境变量。只要未定义MONGODB_URI(在server.js中),您就可以使用默认值:
// Connect to the database before starting the application server.
mongodb.MongoClient.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/myLocalDb', function (err, database) {
if (err) {
console.log(err);
process.exit(1);
}
在这种情况下,您的本地MongoDB必须正在运行,并且在您创建新用户时将创建名为myLocalDb的数据库。
或者,如果您不想更改代码,则只需向MONGODB_URI声明一个本地值:
set MONGODB_URI='mongodb://localhost:27017/myLocalDb'
答案 1 :(得分:0)
修复此错误并从mLab连接到MongoDB数据库的另一种方法是在计算机上手动设置环境路径。
为环境变量命名 int
并将您的MongoDB uri从mLab粘贴到变量值 MONGODB_URI
的输入中。保存并重新启动您的程序。
要验证环境路径是否已在节点模式下成功保存
mongodb://<dbuser>:<dbpassword>@ds131687.mlab.com:31687/example
您会看到您的mLab db的uri已登录到您的控制台。