mongodb - Mongo-go-driver:超出上下文截止日期
问题描述
我最近为我正在开发的应用程序升级到更新的官方 golang mongo 驱动程序。对于我的本地开发来说,一切都很好,但是当我连接它并指向我的后端服务器时,我在调用 client.Ping(...) 方法时得到了“超出上下文截止日期”。
旧的驱动程序代码仍然可以正常工作,我还打印出连接字符串,可以将其复制并粘贴到指南针应用程序中,它可以正常工作。
但是对于我的一生,我无法弄清楚为什么这个新代码会返回上下文超时。唯一不同的是 mongo 在非标准端口 32680 上运行,我也在使用 mgm 包。然而,它只是在引擎盖下使用了官方的 mongo 驱动程序。
Mongo 版本是:4.0.12(本地和远程)
连接代码在这里:
// NewClient creates a mongo DateBase connection
func NewClient(cfg config.Mongo) (*Client, error) {
// create database connection string
conStr := fmt.Sprintf("mongodb://%s:%s@%s:%s", cfg.Username, cfg.Password, cfg.Host, cfg.Port)
// set mgm conf ie ctxTimeout value
conf := mgm.Config{CtxTimeout: cfg.CtxTimeout}
// setup mgm / DateBase connection
err := mgm.SetDefaultConfig(&conf, cfg.Database, options.Client().ApplyURI(conStr))
if err != nil {
return nil, errors.Wrapf(err, "failed to connect to mongodb. cfg: %+v. conStr: %+v.", cfg, conStr)
}
// get access to underlying mongodb client driver, db and mgmConfig. Need for adding additional tools like seeding/migrations/etc
mgmCfg, client, db, err := mgm.DefaultConfigs()
if err != nil {
return nil, errors.Wrap(err, "failed to return mgm.DefaultConfigs")
}
// NOTE: fails here!
if err := client.Ping(mgm.Ctx(), readpref.Primary()); err != nil {
return nil, errors.Wrapf(err, "Ping failed to mongodb. cfg: %+v. conStr: %+v. mgmCfg: %+v", cfg, conStr, mgmCfg)
}
return &Client{
cfg: cfg,
mgmCfg: mgmCfg,
client: client,
db: db,
}, nil
}
帮助!我不知道我怎么能再调试这个了?
解决方案
尝试在您的 DSN 中添加您的 authsource,
就像是
mongodb://USER:PASSWORD@HOST:PORT/DBNAME?authsource=AUTHSOURCE
推荐阅读
- node.js - 我们如何在 express ejs 中显示 flash 消息
- sql - 我在加入两个实体类时遇到问题
- mysql - 插入许多行,LAST_INSERT_ID 返回 1
- swift - SCNShadable 没有动画
- c# - 将 C# 函数传递给 CLI/C++ 代码时出现垃圾收集器错误
- typescript - 如何使用 rxjs 过滤器在每个元素中使用可变数量的类别进行过滤
- c# - ObserveEveryValueChanged 未收到所有更改
- javascript - Angular 7,使用来自对象的一些值创建新对象
- python-3.x - 在使用 COPY 将大表读入 pandas 数据帧时使用参数化 SQL 查询
- c# - 如何使用 LINQ/Divide and Conquer 方法以优雅的方式迭代一个循环或无循环