Heroku + MEAN堆栈错误:参数“url”必须是字符串,而不是未定义

时间:2017-06-30 20:22:58

标签: angularjs node.js mongodb heroku mean-stack

我正在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上拥有完整的应用。我也克隆了它,并尝试在本地运行它并收到错误。为什么部署时有效但不在本地?

2 个答案:

答案 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已登录到您的控制台。

How to set up an environment path on windows

How to set up an environment path on Mac