使用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
相关产品推荐
相关产品推荐

