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

MongoClient.connect回调未执行:连接数据库后不打印connected

Node.js连接MongoDB成功但控制台未打印"connected"问题

我的代码

const mongodb = require('mongodb')
const MongoClient = mongodb.MongoClient

const url = 'mongodb://127.0.0.1:27017/task-manager'

const client = new MongoClient(url)

client.connect((error,client)=>{
    if(error){
        console.log('unable to connect to database')
    }

    console.log('connected')
})

问题描述

MongoDB服务已启动,执行node app.js后,MongoDB控制台显示已接受连接,但Node.js控制台并未打印"connected"。已尝试修改防火墙设置开放27017端口,问题仍未解决。

MongoDB控制台日志

{"t":{"$date":"2024-01-02T10:55:49.736+05:30"},"s":"I",  "c":"NETWORK",  "id":22943,          "ctx":"listener","msg":"Connection accepted","attr":{"remote":"127.0.0.1:51487","uuid":{"uuid":   {"$uuid":"82e75c91-1569-429a-8ab8-f9df73b09bd3"}},"connectionId":8,"connectionCount":8}}
{"t":{"$date":"2024-01-02T10:55:49.739+05:30"},"s":"I",  "c":"NETWORK",  "id":51800,   "ctx":"conn8","msg":"client metadata","attr":{"remote":"127.0.0.1:51487","client":"conn8","doc":{"application":{"name":"mongosh 2.1.1"},"driver":{"name":"nodejs|mongosh","version":"6.3.0|2.1.1"},"platform":"Node.js v20.9.0, LE","os":{"name":"win32","architecture":"x64","version":"10.0.22621","type":"Windows_NT"}}}}
{"t":{"$date":"2024-01-02T10:58:04.729+05:30"},"s":"I",  "c":"NETWORK",  "id":22943,   "ctx":"listener","msg":"Connection accepted","attr":{"remote":"127.0.0.1:51502","uuid":{"uuid":{"$uuid":"0ff1492e-4251-4162-8f2c-511ecec28105"}},"connectionId":9,"connectionCount":9}}
{"t":{"$date":"2024-01-02T10:58:04.732+05:30"},"s":"I",  "c":"NETWORK",  "id":51800,   "ctx":"conn9","msg":"client metadata","attr":{"remote":"127.0.0.1:51502","client":"conn9","doc":{"driver":{"name":"nodejs","version":"6.3.0"},"platform":"Node.js v20.5.0, LE","os":{"name":"win32","architecture":"x64","version":"10.0.22621","type":"Windows_NT"}}}}
{"t":{"$date":"2024-01-02T10:58:15.244+05:30"},"s":"I",  "c":"NETWORK",  "id":22943,   "ctx":"listener","msg":"Connection accepted","attr":{"remote":"127.0.0.1:51504","uuid":{"uuid":{"$uuid":"94614883-ab8a-45b6-88f6-d1e1eb3fbbcb"}},"connectionId":10,"connectionCount":10}}
{"t":{"$date":"2024-01-02T10:58:15.246+05:30"},"s":"I",  "c":"NETWORK",  "id":51800,   "ctx":"conn10","msg":"client metadata","attr":{"remote":"127.0.0.1:51504","client":"conn10","doc":{"driver":{"name":"nodejs","version":"6.3.0"},"platform":"Node.js v20.5.0, LE","os":{"name":"win32","architecture":"x64","version":"10.0.22621","type":"Windows_NT"}}}}

解决方案

1. 修复回调参数冲突并打印错误详情

回调函数的第二个参数与外部定义的client重名,会覆盖外部变量;且原代码未打印具体错误信息,无法排查潜在问题。修改如下:

const mongodb = require('mongodb')
const MongoClient = mongodb.MongoClient

const url = 'mongodb://127.0.0.1:27017/task-manager'

const client = new MongoClient(url)

client.connect((error, connectedClient) => {
  if(error){
    console.log('unable to connect to database', error) // 打印具体错误
    return // 出错后停止执行后续代码
  }

  console.log('connected')
  // 使用connectedClient进行数据库操作
})

2. 改用官方推荐的Async-Await写法

MongoDB Node.js驱动v6+版本已不再推荐回调写法,优先使用Promise/Async-Await,兼容性更好且代码更清晰:

const mongodb = require('mongodb')
const MongoClient = mongodb.MongoClient

const url = 'mongodb://127.0.0.1:27017/task-manager'

const client = new MongoClient(url)

async function connectToDatabase() {
  try {
    await client.connect()
    console.log('connected')
    // 在这里执行数据库操作
  } catch (error) {
    console.log('unable to connect to database', error)
  }
}

connectToDatabase()

3. 额外排查步骤

  • 执行npm list mongodb确认驱动版本,如果是v6+,回调写法确实存在参数变化问题,优先使用Async-Await。
  • 临时添加process.stdin.resume()到代码末尾,防止Node.js进程提前退出,测试连接效果。

内容的提问来源于stack exchange,提问作者Suchir Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:44:55