Golang使用fiber对接MongoDB调用Find方法报client is disconnected错误
问题根因
你在database/db.go的connectToMongo函数中添加了defer client.Disconnect(ctx)逻辑,该延迟调用会在connectToMongo函数执行完毕返回时自动触发,直接将MongoDB客户端连接断开。后续业务层调用database.DB操作数据库时,对应的客户端已经被关闭,自然会抛出Client is disconnected错误。
修复方案
直接删除connectToMongo函数里的defer client.Disconnect(ctx)这行代码即可。MongoDB官方客户端自带连接池管理,不需要在初始化连接阶段就设置自动断开逻辑,仅需要在进程退出前主动调用Disconnect释放资源即可,服务正常运行过程中保持客户端长连接即可。
可选优化建议
- 可以把MongoDB客户端实例也暴露为全局变量,方便后续进程退出时调用Disconnect释放资源,比如在
database包新增var Client *mongo.Client,初始化时完成赋值,主函数中监听退出信号时调用database.Client.Disconnect(context.Background()) - 原有初始化逻辑中
context.WithTimeout对应的cancel调用可以保留,该逻辑是用来控制初始化连接的超时时间,不存在问题。
内容的提问来源于stack exchange,提问作者The Rock
相关产品推荐
相关产品推荐

