环回 API 连接到 MongoDB Atlas,失败

Loopback API connecting to MongoDB Atlas, fails

貌似大概有5个这样的问题,都没有回答,也许做过的人有时间分享解决方案。

我在本地有一个环回 API 应用程序 运行,它在本地连接良好 [=7​​5=] - 我有 "loopback-connector-mongodb": "^3.3. 1" 安装,如前所述 - 一切正常

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

本地连接有效

"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:3000http://localhost:3000/explorer

浏览您的 REST API

c:\loopback-test\node_modules\mongodb\lib\replset.js:345 process.nextTick(函数() { 抛出错误; }) ^ 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": ""
}

结果: 错误:无法创建数据源 "loopback-test":无法初始化连接器 "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"
}

结果仍然是: 错误:无法创建数据源 "loopback-test":无法初始化连接器 "mongodb":主机标识符中有双冒号

所以现在我开始考虑使用 3.6 驱动程序,但我想再尝试一个 而且我几乎以为我有它 - 因为在 "Browse your 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:3000http://localhost:3000/explorer 浏览您的 REST API 连接失败:MongoError:没有可用的 mongos 代理 它将在下一个请求时重试。

c:\loopback-test\node_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:3000http://localhost:3000/explorer 浏览您的 REST API 连接失败:MongoError:首次连接时无法连接到服务器 [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"
}

好吧,希望我没有浪费任何人的时间,因为我确实一直在关注我 post 一个问题...我搜索了连接器的文档 - 不知道为什么我以前没有。 ...但是使用 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 Connection String URI 插入到主机参数而不是 url 参数引起的。

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

您可以在 Loopback/MongoDB Connection Properties 上找到有关参数的更多信息。

这个对我有用:

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