无法使用 nestjs/mongoose 连接 mongoDB
Posted
技术标签:
【中文标题】无法使用 nestjs/mongoose 连接 mongoDB【英文标题】:Unable to connect mongoDB using nestjs/mongoose 【发布时间】:2021-02-17 01:19:48 【问题描述】:我有一个nest.js节点服务器,我试图在app.module中连接mongoDB数据库,当连接字符串不包含数据库名称时 - 连接到默认数据库“测试”成功,但是当我指定了数据库名称 - 总是出现“身份验证失败”错误。
app.module.ts:
这行得通:
imports: [
MongooseModule.forRoot('mongodb://admin:admin@localhost:30000'),
]
但是这个指定数据库名称失败并出现身份验证错误:
imports: [
MongooseModule.forRoot('mongodb://admin:admin@localhost:30000/test'),
]
或:
imports: [
MongooseModule.forRoot('mongodb://admin:admin@localhost:30000/data'),
]
直接使用MongoClient(不用nestjs)连接成功:
const client = new MongoClient('mongodb://admin:admin@localhost:30000');
await client.connect();
db = client.db('data');
知道我的问题是什么,我应该怎么做才能解决这个问题?
谢谢。
【问题讨论】:
看看***.com/questions/63754742/… 【参考方案1】:将数据库名称指定为连接选项 - 不作为连接字符串的一部分解决了问题:
imports: [
MongooseModule.forRoot(
uri: 'mongodb://admin:admin@localhost:30000',
dbName: 'data'
),
]
【讨论】:
【参考方案2】:@nestjs/mongoose 的最新版本实际上不支持此功能,例如在 ^7.2.4 版本中,它接收一个字符串作为第一个参数,接收一个对象作为第二个参数,所以对我有用的是:
imports: [
MongooseModule.forRoot(
'mongodb://user:password@localhost:27017/nestjs-tutorial?authSource=admin&readPreference=primary',
),
customModule,
],
【讨论】:
【参考方案3】:根据NestJS official document,forRoot()
方法接受与来自 Mongoose 包的mongoose.connect()
相同的配置对象。
您可以这样定义数据库名称:
imports: [
MongooseModule.forRoot('mongodb://admin:admin@localhost:30000',
dbName: 'custom_db_name',
)
]
【讨论】:
以上是关于无法使用 nestjs/mongoose 连接 mongoDB的主要内容,如果未能解决你的问题,请参考以下文章
Nestjs - Mongoose - 虚拟字段 - 无法在 graphql 操场上查询
在 @nestjs/mongoose 中设置 mongoose 全局选项