Heroku + MEAN Stack Error: Parameter "url" must be a string, not undefined
Heroku + MEAN Stack Error: Parameter "url" must be a string, not undefined
我正在关注 Heroku tutorial 上关于构建 MEAN Stack Contact APP 的文章,但我 运行 遇到了一些奇怪的错误!虽然我的应用程序在部署后运行良好,但当我在本地 运行 时,该应用程序无法连接到 Mongodb。我得到的错误是:
url.js:88
throw new TypeError('Parameter "url" must be a string, not ' + typeof url);
^
TypeError: Parameter "url" must be a string, not undefined
at Url.parse (url.js:88:11)
at Object.urlParse [as parse] (url.js:82:5)
at module.exports (/Users/Ananda/mean-contactlist/node_modules/mongodb/lib/url_parser.js:15:23)
at connect (/Users/Ananda/mean-contactlist/node_modules/mongodb/lib/mongo_client.js:480:16)
at Function.MongoClient.connect (/Users/Ananda/mean-contactlist/node_modules/mongodb/lib/mongo_client.js:244:3)
at Object. (/Users/Ananda/mean-contactlist/server.js:17:21)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
根据我的理解,当我使用 "node server" 启动应用程序时,它找不到 mongodb 数据库 url ...只是不知道为什么,因为它发现它很好运行 在 heroku 上。我也可以在本地对 运行 这个应用程序做些什么?他们在 Github 上有完整的应用程序。我也克隆了它并在本地尝试 运行ning 它并收到错误。为什么它在部署时有效但在本地不起作用?
那是因为 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'
修复此错误并从 mLab 连接到 MongoDB 数据库的另一种方法是在您的计算机上手动设置环境路径。
将您的 环境变量 MONGODB_URI
命名并将您的 MongoDB uri 从 mLab 粘贴到您的 变量值 [=12 的输入中=].保存并重新启动您的程序。
验证环境路径是否在节点模式下成功保存运行
console.log(process.env.MONGODB_URI)
您会看到您的 mLab 数据库的 uri 已记录到您的控制台。
我正在关注 Heroku tutorial 上关于构建 MEAN Stack Contact APP 的文章,但我 运行 遇到了一些奇怪的错误!虽然我的应用程序在部署后运行良好,但当我在本地 运行 时,该应用程序无法连接到 Mongodb。我得到的错误是:
url.js:88 throw new TypeError('Parameter "url" must be a string, not ' + typeof url);
^TypeError: Parameter "url" must be a string, not undefined
at Url.parse (url.js:88:11)
at Object.urlParse [as parse] (url.js:82:5)
at module.exports (/Users/Ananda/mean-contactlist/node_modules/mongodb/lib/url_parser.js:15:23)
at connect (/Users/Ananda/mean-contactlist/node_modules/mongodb/lib/mongo_client.js:480:16)
at Function.MongoClient.connect (/Users/Ananda/mean-contactlist/node_modules/mongodb/lib/mongo_client.js:244:3)
at Object. (/Users/Ananda/mean-contactlist/server.js:17:21)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
根据我的理解,当我使用 "node server" 启动应用程序时,它找不到 mongodb 数据库 url ...只是不知道为什么,因为它发现它很好运行 在 heroku 上。我也可以在本地对 运行 这个应用程序做些什么?他们在 Github 上有完整的应用程序。我也克隆了它并在本地尝试 运行ning 它并收到错误。为什么它在部署时有效但在本地不起作用?
那是因为 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'
修复此错误并从 mLab 连接到 MongoDB 数据库的另一种方法是在您的计算机上手动设置环境路径。
将您的 环境变量 MONGODB_URI
命名并将您的 MongoDB uri 从 mLab 粘贴到您的 变量值 [=12 的输入中=].保存并重新启动您的程序。
验证环境路径是否在节点模式下成功保存运行
console.log(process.env.MONGODB_URI)
您会看到您的 mLab 数据库的 uri 已记录到您的控制台。