服务器发现和监控引擎已弃用

新手上路,请多包涵

我在我的 Node.js 应用程序中使用 Mongoose,这是我的配置:

 mongoose.connect(process.env.MONGO_URI, {
   useNewUrlParser: true,
   useUnifiedTopology: true,
   useCreateIndex: true,
   useFindAndModify: false
}).then(()=>{
    console.log(`connection to database established`)
}).catch(err=>{
    console.log(`db error ${err.message}`);
    process.exit(-1)
})

但在控制台中它仍然给我警告:

DeprecationWarning:当前的服务器发现和监控引擎已被弃用,并将在未来的版本中删除。要使用新的服务器发现和监控引擎,请将选项 { useUnifiedTopology: true } 传递给 MongoClient 构造函数。

问题是什么?我之前没有使用 useUnifiedTopology 但现在它显示在控制台中。我将它添加到配置中,但它仍然给我这个警告,为什么?我什至不使用 MongoClient

编辑

正如 Felipe Plets 回答的那样,Mongoose 存在问题,他们在以后的版本中修复了这个错误。所以你可以通过更新猫鼬版本来解决问题。

原文由 iLiA 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 395
2 个回答

更新

Mongoose 5.7.1 已发布,似乎解决了该问题,因此设置 useUnifiedTopology 选项按预期工作。

 mongoose.connect(mongoConnectionString, {useNewUrlParser: true, useUnifiedTopology: true});

原始答案

我遇到了同样的问题并决定深入研究 Mongoose 代码: https ://github.com/Automattic/mongoose/search?q=useUnifiedTopology&unscoped_q=useUnifiedTopology

似乎是在 Mongoose 5.7 版上添加的一个选项,但还没有很好的文档记录。我什至在图书馆历史中都找不到它 https://github.com/Automattic/mongoose/blob/master/History.md

根据代码中的注释:

  • @param {Boolean} [options.useUnifiedTopology=false] 默认为 False。设置为 true 以选择加入 MongoDB 驱动程序的副本集和分片集群监控引擎。

项目GitHub上也有关于这个错误的问题: https ://github.com/Automattic/mongoose/issues/8156

就我而言,我不在副本集或分片集群中使用 Mongoose,尽管该选项应该为 false。但如果为假,则抱怨该设置应该为真。一旦为真,它仍然无法工作,可能是因为我的数据库没有在副本集或分片集群上运行。

我已经降级到 5.6.13,我的项目又恢复正常了。所以我现在看到的唯一选择是降级它并等待修复更新为更新版本。

原文由 Felipe Plets 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您使用的是 winston ,则需要 { useUnifiedTopology: true }

例如:

 winston.add(
  new winston.transports.MongoDB({
    db: 'mongodb://localhost/vidly',
    level: 'error',
    options: { useUnifiedTopology: true },
  })
);

原文由 qlian1000 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题