Heroku + MEAN堆栈错误:参数“url”必须是字符串,而不是未定义
我正在关注这个来自Heroku的tutorial,建立一个MEAN Stack Contact APP,我遇到了一些奇怪的错误!虽然我的应用程序在部署后工作正常但是当我在本地运行它时,应用程序无法连接到Mongodb。我得到的错误是:
url.js:88抛出新的TypeError('参数'url“必须是一个字符串,而不是'+ typeof url); ^
TypeError:参数“url”必须是字符串,而不是未定义 在Url.parse(url.js:88:11) at Object.urlParse [as parse](url.js:82:5) 在module.exports(/Users/Ananda/mean-contactlist/node_modules/mongodb/lib/url_parser.js:15:23) 在connect(/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上有完整的应用程序。我也克隆了它,并尝试在本地运行它并收到错误。为什么部署时有效但不在本地?
回答如下:这是因为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'
Heroku + MEAN堆栈错误:参数“url”必须是字符串,而不是未定义
我正在关注这个来自Heroku的tutorial,建立一个MEAN Stack Contact APP,我遇到了一些奇怪的错误!虽然我的应用程序在部署后工作正常但是当我在本地运行它时,应用程序无法连接到Mongodb。我得到的错误是:
url.js:88抛出新的TypeError('参数'url“必须是一个字符串,而不是'+ typeof url); ^
TypeError:参数“url”必须是字符串,而不是未定义 在Url.parse(url.js:88:11) at Object.urlParse [as parse](url.js:82:5) 在module.exports(/Users/Ananda/mean-contactlist/node_modules/mongodb/lib/url_parser.js:15:23) 在connect(/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上有完整的应用程序。我也克隆了它,并尝试在本地运行它并收到错误。为什么部署时有效但不在本地?
回答如下:这是因为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'