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

