为什么MongoDB无法连接我的NodeJS应用程序?

3

在Node.js服务器中,MongoDB无法连接。终端上显示的错误代码为

[nodemon] restarting due to changes...
[nodemon] starting `node app.js`
Server started on port 5000
MongoParseError: URI does not have hostname, domain name and tld
    at parseSrvConnectionString (/home/psayeed1990/programming/node/node_passport_login-master/node_modules/mongodb/lib/core/uri_parser.js:41:21)
    at parseConnectionString (/home/psayeed1990/programming/node/node_passport_login-master/node_modules/mongodb/lib/core/uri_parser.js:516:12)
    at connect (/home/psayeed1990/programming/node/node_passport_login-master/node_modules/mongodb/lib/operations/connect.js:266:3)
    at ConnectOperation.execute (/home/psayeed1990/programming/node/node_passport_login-master/node_modules/mongodb/lib/operations/connect.js:191:5)
    at executeOperation (/home/psayeed1990/programming/node/node_passport_login-master/node_modules/mongodb/lib/operations/execute_operation.js:83:26)
    at MongoClient.connect (/home/psayeed1990/programming/node/node_passport_login-master/node_modules/mongodb/lib/mongo_client.js:216:10)
    at /home/psayeed1990/programming/node/node_passport_login-master/node_modules/mongoose/lib/connection.js:632:12
    at new Promise (<anonymous>)
    at NativeConnection.Connection.openUri (/home/psayeed1990/programming/node/node_passport_login-master/node_modules/mongoose/lib/connection.js:629:19)
    at Mongoose.connect (/home/psayeed1990/programming/node/node_passport_login-master/node_modules/mongoose/lib/index.js:328:15)
    at Object.<anonymous> (/home/psayeed1990/programming/node/node_passport_login-master/app.js:18:4)
    at Module._compile (internal/modules/cjs/loader.js:1128:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1167:10)
    at Module.load (internal/modules/cjs/loader.js:983:32)
    at Function.Module._load (internal/modules/cjs/loader.js:891:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12) {
  name: 'MongoParseError',
  [Symbol(mongoErrorContextSymbol)]: {}

这是连接的代码。
dbPassword = 'mongodb+srv://sayeed:'+ encodeURIComponent('123456') + 'mongodb://localhost:27017/node-passport-login';

module.exports = {
    mongoURI: dbPassword
};


完整的Node.js应用程序是从Traversy Media的GitHub页面Node Passport Login获取的。

去掉 +srv,它将变成 mongodb://localhost:27017;srv 用于查找 MongoDB 集群的顶级域名。 - vahid sabet
3个回答

3

是的,谢谢。我也有一个特殊字符,我没有意识到它引起了我的问题。 - undefined

1
您提供的mongodb连接URL不正确,这里是指dbPassword。如果您想连接到本地托管的mongodb数据库,请按照以下步骤操作。
在终端中启动mongod,然后将dbPassword更改为本地URL,如下所示。
dbPassword="mongodb://localhost:27017/dbName"

或者您可以像这样直接在app.js中使用URL
mongoose.connect("mongodb://localhost:27017/dbName")

如果这不是你想要的,而你想像Brad一样连接到云数据库,你需要首先在mongodb云上创建一个账户,登录后创建一个集群,然后复制URL。 我认为使用本地mongodb服务器更容易。只有当你想部署应用程序时才需要云数据库。

非常感谢。我拥有一个ec2实例,并想使用nginx和域名在其中部署它。那么您给出的URL能否适用于此?为什么我不需要本地数据库的用户名和密码?在生产水平上是否安全? - Abu Sayeed Mondal
我想在ec2实例中本地使用MongoDB。 - Abu Sayeed Mondal
我假设您正在使用MongoDB云中提供的免费层。如果是这种情况,只需登录到您的帐户https://account.mongodb.com/account/login,然后单击连接,然后单击连接您的应用程序,您将在那里看到连接字符串,只需复制粘贴并替换密码部分为您的MongoDB云密码,然后您就可以开始了。 - Vivek p.a
我的意思是我已经在EC2实例中安装了MongoDB。然后在上传我的Node应用程序之后,我必须连接数据库。您提供的字符串可以正常工作。 - Abu Sayeed Mondal

0
在我的情况下,密码字符串末尾有 '*' 和 '#'。我也不想使用自动生成的密码。
之前:
password*#

之后:

password%2A%23

您可以使用在线工具对密码进行URL编码

https://www.url-encode-decode.com/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接