MongoDB可以连接MongoClient但不能连接mongoose
Posted
技术标签:
【中文标题】MongoDB可以连接MongoClient但不能连接mongoose【英文标题】:MongoDB can be connected with MongoClient but not mongoose 【发布时间】:2022-01-23 19:02:39 【问题描述】:所以当我在部署中运行我的应用程序时,后端使用 MongoClient 连接到 MongoDB,如下所示:
import MongoClient from 'mongodb'
const url = process.env.MONGODB_URI
MongoClient.connect(url, useNewUrlParser: true, useUnifiedTopology: true ,(err, db)=>
console.log(url)
db.close()
)
一切正常。但是如果我把它改成
import mongoose from 'mongoose'
mongoose.Promise = global.Promise
mongoose.connect(url, useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true )
mongoose.connection.on('error', () =>
throw new Error(`unable to connect to database: $url`)
)
它给出了以下错误:
webpack://HappyHourWeb/./server/server.js?:29
throw new Error(`unable to connect to database: $_config_config__WEBPACK_IMPORTED_MODULE_0__["default"].mongoUri`)
^
Error: unable to connect to database: my_database_url,
at NativeConnection.eval (webpack://HappyHourWeb/./server/server.js?:29:9)
at NativeConnection.emit (node:events:390:28)
at /Users/Hieudo/Documents/Project/HappyHourWeb/node_modules/mongoose/lib/connection.js:807:30
at processTicksAndRejections (node:internal/process/task_queues:78:11)
非常感谢任何帮助!
【问题讨论】:
在您的第一个示例中,您从环境变量中获取url
,但在您的第二个示例中,未定义 url,这是有意的吗?
网址是否包含+srv
,如果是,您使用的是支持它的猫鼬版本吗?查看 mongoose 文档中的 Error Handling 以了解如何记录发生的具体错误。
@GaëtanBoyals 我使用的是相同的网址。
@Joe 是的,我的网址包含 +srv。它的类型如下:“mongodb+srv://mongodb://
url。
【参考方案1】:
根据各种来源,包括MongoDB Connection String URI reference、Mongoose connection docs(Ctrl+F 并搜索srv
以跳转到正确的主题)和this question on SO 上最受好评的答案,您应该处理标准 URI 和 DNS URI 不同。
Mongoose 接受 dbName
选项
[...]如果您无法在连接字符串中指定默认数据库(例如某些 mongodb+srv 语法连接),则很有用。
原生 MongoDB 驱动程序自动处理它的事实并不一定意味着 Mongoose 会。尝试将 DB 名称与 URI 分开,并在与 Mongoose 连接时将其作为第二个参数传递。
另外,你的那部分代码:
mongoose.connection.on('error', () =>
throw new Error(`unable to connect to database: $url`)
)
不检查连接错误,如果在在初始连接建立之后遇到错误,它会发出一个事件。
正如 Joe 在 cmets 中指出的那样,您应该使用 try/catch 语法或 .catch
回调来处理初始连接错误和可能出现的错误。更多信息in the docs.
【讨论】:
以上是关于MongoDB可以连接MongoClient但不能连接mongoose的主要内容,如果未能解决你的问题,请参考以下文章
mongodb eclipse java.lang.ClassNotFoundException: com.mongodb.MongoClient
将MongoClient与列表ServerAddress一起使用时,com.mongodb.MongoTimeoutException