连接到MongoDB Atlas的环回API失败



看起来大约有 5 种此类问题,都没有得到解答,也许做过的人会有一些时间分享解决方案。

我有一个在本地运行的环回 API 应用程序,它在本地连接到 mongoDB - 我安装了"loopback-connector-mongodb":"^3.3.1",如前所述 - 一切正常

所以这是我通过的进展(因为我不确定正在使用哪个驱动程序,我尝试了两种语法,语法? 语法?

本地连接有效

"loopback-test": {
"connector": "mongodb",
"name": "loopback-test",
"host": "localhost",
"port": 27017,
"url": "",
"database": "test",
"user": "",
"password": "",
}

我第一次尝试连接到 ALAS。 这似乎有效,但在反馈之后它就出错了。

"loopback-test": {
"connector": "mongodb",
"name": "loopback-test",
"host": "mongodb://adminUser:pwd@cluster0-shard-00-00-xxx.mongodb.net:27017,cluster0-shard-00-01-xxx.mongodb.net:27017,cluster0-shard-00-02-xxx.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin",
"port": 27017,
"url": "",
"database": "test",
"user": "",
"password": ""
}

结果是: Web 服务器侦听位置:http://localhost:3000 浏览您的 REST API http://localhost:3000/explorer

C:\loopback-testode_modules\mongoDB\lib\replset.js:345 process.nextTick(function() { throw err; }) ^ MongoError: 数据库名称不能包含字符 '/'

我认为它不喜欢"/test...",所以我删除了它

"loopback-test": {
"connector": "mongodb",
"name": "loopback-test",
"host": "mongodb://adminUser:pwd@cluster0-shard-00-00-xxx.mongodb.net:27017,cluster0-shard-00-01-xxx.mongodb.net:27017,cluster0-shard-00-02-xxx.mongodb.net:27017",
"port": 27017,
"url": "",
"database": "test",
"user": "",
"password": ""
}

结果是: 错误:无法创建数据源"环回测试":无法初始化连接器"mongodb":主机标识符中的双冒号

"loopback-test": {
"connector": "mongodb",
"name": "loopback-test",
"host": "cluster0-shard-00-00-xxx.mongodb.net:27017,cluster0-shard-00-01-xxx.mongodb.net:27017,cluster0-shard-00-02-xxx.mongodb.net:27017",
"port": 27017,
"url": "",
"database": "test",
"user": "adminUser",
"password": "pwd"
}

仍然导致: 错误:无法创建数据源"环回测试":无法初始化连接器"mongodb":主机标识符中的双冒号

所以到现在为止,我开始认为我使用的是 3.6 驱动程序,但我想再尝试一个 我几乎以为我拥有了它 - 因为在"浏览您的 REST API......"之后花了几秒钟的时间。消息,用于弹出错误...但它确实做到了。

"loopback-test": {
"connector": "mongodb",
"name": "loopback-test",
"host": "cluster0-shard-00-00-xxx.mongodb.net,cluster0-shard-00-01-xxx.mongodb.net,cluster0-shard-00-02-xxx.mongodb.net",
"port": 27017,
"url": "",
"database": "test",
"user": "adminUser",
"password": "pwd"
}

仍然导致:

Web 服务器侦听位置:http://localhost:3000 浏览您的 REST API http://localhost:3000/explorer 连接失败:Mongo错误:没有可用的 mongos 代理 对于下一个请求,将重试它。

C:\环回测试ode_modules\mongoDB\lib\mongo_client.js:421 投掷错误 ^ MongoError:没有可用的 mongos 代理

所以现在 IM 到 3.6 驱动程序语法

"loopback-test": {
"connector": "mongodb",
"name": "loopback-test",
"host": "mongodb+srv://adminUser:pwd@cluster0-xxx.mongodb.net",
"port": 27017,
"url": "",
"database": "test",
"user": "",
"password": ""
}

Web 服务器侦听位置:http://localhost:3000 浏览您的 REST API http://localhost:3000/explorer 连接失败:Mongo错误:首次连接时无法连接到服务器 [cluster0-xxx.mongodb.net:27017] [MongoError: getaddrinfo ENOTFOUND cluster0-xxx.mongodb.net cluster0-xxx.mongodb.net:27017] 对于下一个请求,将重试它。

最后 - 我试过

"loopback-test": {
"connector": "mongodb",
"name": "loopback-test",
"host": "cluster0-xxx.mongodb.net",
"port": 27017,
"url": "",
"database": "test",
"user": "adminUser",
"password": "pwd"
}

这个对我有用:

"db": {
"port": 27017,
"url": "mongodb+srv://user:password@cluster0-xxxxx.mongodb.net",
"database": "collectionName",
"name": "mongodb",
"connector": "mongodb"
},

好吧,希望我没有浪费任何人的时间,因为我确实在发布问题后一直在照顾......我搜索了连接器的文档 - 不知道为什么我以前没有......但是使用 URL 参数并将连接字符串作为 URL 传递并绕过其他参数,工作正常。

"loopback-test": {
"connector": "mongodb",
"name": "loopback-test",
"url": "mongodb://adminUser:pwd@cluster0-shard-00-00-xxx.mongodb.net:27017,cluster0-shard-00-01-xxx.mongodb.net:27017,cluster0-shard-00-02-xxx.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin"
}

我希望这可以帮助其他人在 database.json 参数上敲打他们的头。

干杯 - 一如既往 - 感谢您的帮助。

澄清一下,该问题是由MongoDB连接字符串URI插入主机参数而不是url参数引起的。

host 参数应仅接受 MongoDB 服务器地址,该地址可以是主机名、IP 地址或 UNIX 域套接字。

您可以在 Loopback/MongoDB 连接属性上找到有关参数的更多信息。

最新更新