You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jest测试MongoDB连接时出现getaddrinfo EAI_AGAIN mongo错误求助

解决Jest测试中MongoDB连接的getaddrinfo EAI_AGAIN mongo错误

这个错误的核心是系统无法解析mongo这个主机名,找不到对应的IP地址,导致连接超时失败。以下是针对性的解决步骤:

1. 替换MongoDB连接地址的主机名

如果你的MongoDB是本地安装(非Docker容器),把连接URL里的mongo换成localhost或127.0.0.1:

plugin.cfg = {
    mongo: {
        url: 'mongodb://localhost:27017/', // 替换成localhost或127.0.0.1
        dbwildduck: 'wildduck',
        dbwebsite: 'website',
    },
    // ...其他配置
}

本地环境下,localhost会直接指向本机的MongoDB服务,避免DNS解析失败。

2. 确认MongoDB服务正在运行

连接失败前先检查MongoDB是否启动:

  • Windows:打开「服务」面板,找到MongoDB Server服务,确认状态为「正在运行」
  • macOS(Homebrew安装):执行命令 brew services list,查看mongodb服务状态;未启动则执行 brew services start mongodb-community
  • Linux(systemd系统):执行命令 sudo systemctl status mongod;未启动则执行 sudo systemctl start mongod

3. Docker环境下的适配(如果用Docker Compose部署MongoDB)

如果MongoDB是通过Docker Compose启动的,而Jest在宿主机运行:

  • 确保Docker Compose中MongoDB服务配置了端口映射,比如:
    services:
      mongo:
        image: mongo:latest
        ports:
          - "27017:27017" # 将容器端口映射到宿主机
    
    之后用localhost:27017作为连接地址即可。
  • 或者把Jest也加入到Docker Compose的服务中,这样就能通过mongo服务名直接解析连接。

4. 修正代码中的数据库名错误

你的代码里存在一个逻辑错误:connection.db(plugin.db.wildduck)中plugin.db.wildduck是null,应该使用配置里的plugin.cfg.mongo.dbwildduck:

try {
    connection = await MongoClient.connect(plugin.cfg.mongo.url);
    db = await connection.db(plugin.cfg.mongo.dbwildduck); // 修正这里,使用配置中的数据库名
} catch (error) {
    throw error
}

否则就算连接成功,也会尝试连接到名为null的数据库,后续查询操作必然失败。


内容的提问来源于stack exchange,提问作者Luciano Pulido

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 23:40:38