【问题标题】:MongoDB Docker URI does not have hostname, domain name and tldMongoDB Docker URI 没有主机名、域名和 tld
【发布时间】:2022-05-01 23:23:53
【问题描述】:

我正在尝试使用 nodejs 连接到位于 docker 上的本地 MongoDB 数据库。我的组件是:

.env 文件

MONGODB_USERNAME = 'accountUser'
MONGODB_PASSWORD = 'password'
MONGODB_HOST = 'mongodb'
MONGODB_DATABASE = 'mydb'

代码:

const uri = `mongodb+srv://${process.env.MONGODB_USERNAME}:${process.env.MONGODB_PASSWORD}@${process.env.MONGODB_HOST}/${process.env.MONGODB_DATABASE}?retryWrites=true&w=majority`;

    console.log(uri);

    const client = new MongoClient(uri);

控制台输出

mongodb+srv://accountUser:abc123@mongodb/mydb?retryWrites=true&w=majority

错误

MongoParseError: URI does not have hostname, domain name and tld

我做错了什么?

【问题讨论】:

标签: node.js mongodb


【解决方案1】:

当您应该使用普通 URI 时,您却尝试使用 SRV URI。

SRV URI 对主机名有额外的安全要求(至少包含 3 个组件)。

从您的 URI 中删除 +srv

【讨论】:

  • +srv URI 由 mongodb atlas 自动生成。有没有办法获得没有+srv 的版本?
  • 是的,在 UI 中为较旧的驱动程序使用一个。
  • 谢谢你,我设法弄明白了很多小时。我在下面添加了一个答案。
【解决方案2】:

1)。进入数据库,点击编辑密码,生成新密码。
2)。进入数据库,点击编辑密码,只输入字符和数字。

【讨论】:

    【解决方案3】:

    如何从 NestJS 应用程序连接到 MongoDB Atlas:

    1. Deployment 下选择Databases
    2. 点击您的数据库实例
    3. 在实例名称和状态旁边单击Connect
    4. 点击Connect your application
    5. DRIVER 下选择Node.js
    6. VERSION 下选择2.2.12 or later
    7. 复制包含所有单个节点的完整 URI,并改用它来连接

    正如D. SM 之前所说,您不能使用包含+srv 的URI,并且回滚驱动程序版本是在没有+srv 的情况下生成连接字符串的唯一方法。

    【讨论】:

      【解决方案4】:

      如果用户名或密码包含以下字符:

      :/?#[]@

      您应该简单地替换这些字符。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-13
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-26
        相关资源
        最近更新 更多