Deno连接MongoDB失败。

8
我正在尝试将我的deno应用程序连接到MongoDB,但是我遇到了错误。
import {MongoClient} from "https://deno.land/x/mongo@v0.21.2/mod.ts";

const client = await new MongoClient();
await client.connect("mongodb+srv://deno:i4vY8AtCEhr6ReqB@sample.7jp1l.mongodb.net/deno?retryWrites=true&w=majority");

const db = client.database("notes");

export default db;

看起来一切都正常,但当我运行应用程序时,出现了这个错误。

error: Uncaught (in promise) Error: MongoError: "Connection failed: failed to lookup address information: nodename nor servname provided, or not known"
                throw new MongoError(`Connection failed: ${e.message || e}`);
              ^
    at MongoClient.connect (client.ts:93:15)
    at async mongodb.ts:4:1

请仔细检查<用户名>和<密码>。 - Haniel Baez
failed to lookup address information: - 我认为这不是您的代码或Deno出现了问题,而是地址无法访问。请尝试使用本地数据库。 - jps
有相同的问题。 - Experimenter
我遇到了同样的问题。 - Arnold Gee
似乎是URL的问题。 - Nur
3个回答

5

我看到的两个问题:

  • 上面的代码片段只适用于在本地安装了Mongo。
  • 连接字符串使用DNS种子列表,但当前库无法解析出主机列表

为了使其能够与Mongo Atlas配合使用,需要使用不同的参数调用connect方法,并查找正确的(静态)主机,而不是(动态)DNS种子列表:

const client = new MongoClient();

const db = await client.connect({
  db: '<your db or collection with work with>',
  tls: true,
  servers: [
    {
      host: '<correct host - the way to get the host - see bellow>',
      port: 27017,
    },
  ],
  credential: {
    username: '<your username>',
    password: '<your password>',
    mechanism: 'SCRAM-SHA-1',
  },
});

如何获取正确的主机:

  • 在Mongo Atlas中打开您的集群
  • 选择连接按钮
  • 选择连接到应用程序选项
  • 选择驱动程序:Node.js和版本:2.2.12或更高版本
  • 您将看到一个跟随@字符的主机列表

1
哇,这对我来说真是个麻烦事,但我能处理好,只需在URI中添加authMechanism=SCRAM-SHA-1并移除retryWrites=true&w=majority。所以你想要的是:
await client.connect("mongodb+srv://deno:i4vY8AtCEhr6ReqB@sample.7jp1l.mongodb.net/deno?authMechanism=SCRAM-SHA-1");

好久不见,希望你已经解决了这个问题!

0

感谢 @nthung.vlvn 提供的线索。确实,主机需要是一个主分片。这修复了 查找地址信息 的问题,但我还遇到了另一个错误,即我的凭据不正确。我必须将数据库“admin”添加到凭据中:

credential: {
    username: '<your username>',
    password: '<your password>',
    db: "admin",
    mechanism: 'SCRAM-SHA-1',
}

这很奇怪,因为我在我的Atlas中没有admin数据库。不管怎样,它开始工作了。


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