NestJS配置Mongoose连接自定义MongoDB数据库失败问题
问题原因
这个故障本质是MongoDB认证源配置错误导致的:
- 你使用的
admin账号是创建在MongoDB内置的admin认证库下的,不属于任何业务库 - 当连接URI不指定业务数据库名时,Mongoose默认会使用
admin库作为认证源校验账号,校验通过后会默认连接test库(你看到的tests库一般是业务代码里隐式创建集合带的后缀,或者拼写偏差) - 当你在URI末尾追加
/my-custom-db指定业务库后,Mongoose会默认将my-custom-db作为认证源,去这个库里校验admin账号的密码——但这个自定义业务库里根本不存在这个账号,自然会认证失败,触发连接重试报错。手动提前创建业务库也解决不了问题,因为故障出在认证环节,和业务库是否存在没有关系。
解决方法
只需要在连接URI末尾追加authSource=admin参数,显式告诉MongoDB去admin库下校验账号身份即可,修改后的app.module.ts配置如下:
@Module({ imports: [ MongooseModule.forRoot('mongodb://admin:root@localhost:27017/my-custom-db?authSource=admin'), CatsModule ], controllers: [], providers: [], })
如果后续要加更多连接配置,也可以用对象形式传参,可维护性更高:
@Module({ imports: [ MongooseModule.forRoot({ uri: 'mongodb://admin:root@localhost:27017/my-custom-db', authSource: 'admin', // 其余配置比如连接超时、副本集配置可按需追加 }), CatsModule ], controllers: [], providers: [], })
补充说明:只要你的数据库账号是创建在
admin库下的,连接任意自定义业务库时都必须指定authSource=admin,这是MongoDB认证机制的规则,和NestJS、Mongoose本身没有关系。
内容的提问来源于stack exchange,提问作者k1k4ss0
相关产品推荐
相关产品推荐

