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

Docker部署MongoDB后Node.js连接无响应问题求助

问题:Node.js连接Docker部署的MongoDB时程序挂起无响应

通过docker-compose部署的MongoDB和mongo-express运行正常,可通过mongo-express创建数据库,但执行Node.js连接脚本时程序一直挂起,无任何输出,数据库也未创建。容器日志显示连接已建立,但直到手动中断脚本,连接才结束。插入数据的脚本也出现同样问题。

相关配置和代码如下:

docker-compose.yml

version: '3.1'
services:
  mongo:
    image: mongo
    restart: unless-stopped
    ports:
      - 27017:27017
    volumes:
      - /home/username/mongodb/data:/data/db
  mongo-express:
    image: mongo-express
    restart: unless-stopped
    ports:
      - 8089:8081

create_db_test.js

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mytestdb";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  console.log("Database created!");
  db.close();
});

执行命令:node create_db_test.js


解决方案

核心问题是MongoDB驱动版本不兼容:当前主流的mongodb包v4+版本已废弃了回调式的MongoClient.connect API,你的代码使用的回调逻辑不会被触发,导致程序一直处于等待状态,无法执行后续的日志打印和关闭连接操作,最终只能手动中断。

可以通过以下两种方式解决:

1. 升级代码为Promise/Async-Await风格(推荐)

适配v4+版本驱动的代码示例:

Promise方式

const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://localhost:27017/mytestdb";

MongoClient.connect(url)
  .then(client => {
    console.log("Database created!");
    client.close();
  })
  .catch(err => {
    console.error("连接失败:", err);
  });

Async-Await方式

const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://localhost:27017/mytestdb";

async function createDatabase() {
  try {
    const client = await MongoClient.connect(url);
    console.log("Database created!");
    client.close();
  } catch (err) {
    console.error("连接失败:", err);
  }
}

createDatabase();

2. 降级MongoDB驱动到v3.x版本

如果想继续使用原有的回调代码,可以安装v3版本的驱动:

npm install mongodb@3

执行后再运行原脚本,就能正常触发回调逻辑,完成数据库创建操作。


内容的提问来源于stack exchange,提问作者Adam Winter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:25:07