我有一个nest.js节点服务器,我试图在应用程序中连接mongoDB数据库。模块,当连接字符串不包含DB名称-连接到默认DB“测试”成功,但当我指定DB名称-总是得到“身份验证失败”错误。
[嵌套] 53087 - 11/08/2023,6:30:46 PM错误[MongooseModule]无法连接到数据库。正在重试(1)...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');
型
问题出在哪里?
8条答案
按热度按时间oewdyzsn1#
将数据库名称指定为连接选项-而不是连接字符串的一部分解决了问题:
字符串
fdbelqdn2#
根据NestJS official document,
forRoot()
方法从Mongoose包中接受与mongoose.connect()
相同的配置对象。你可以在mongoose.connect()的文档中看到你可以应用的所有选项。
你可以这样定义数据库名:
字符串
fjnneemd3#
这在最新版本的@nestjs/mongoose上实际上是不支持的,例如在版本^7.2.4中,它接收一个字符串作为第一个参数,一个对象作为第二个参数,所以对我来说有效的是:
字符串
gojuced74#
正如@Dickson所指出的,我试图指定一个数据库,但直到我从documentation检查
mongoose.connect()
时才有帮助。所以下面是我的工作代码:字符串
同:
型
正如文件所说:
这是连接在默认端口(27017)上本地运行的myapp数据库所需的最小值。如果在您的计算机上连接失败,请尝试使用127.0.0.1而不是localhost。
我需要的是将localhost重命名为IP,正如@Ganesh在他的回答中试图提到的那样。
2izufjch5#
由于某种原因,我的nest js应用程序停止工作,错误是“无法连接到数据库”经过几个小时的挣扎,我把
localhost
改为127.0.0.1
,一切都开始工作。旧代码
MongooseModule.forRoot('mongodb://localhost:27017/some_database')
新代码
MongooseModule.forRoot('mongodb://127.0.0.1:27017/some_database')
我仍然不明白为什么会发生这种情况,以及
127.0.0.1
与localhost
有何不同xdnvmnnf6#
在nest js中连接MongooseModule后,我遇到了同样的问题,直到我将连接字符串mongodb://http://localhost:27017/task-prectice更改为mongodb://localhost:27017/task-prectice,或者您可以将localhost替换为127.0.0.1
sqougxex7#
对我来说,
MongooseModule
掩盖了另一个潜在的错误,我只有在用Mongoose自己重现这个问题时才发现:MongoAPIError:URI不能包含没有值的选项
这让我发现我的
appName
选项没有设置值(尽管它适用于任何选项)-确保所有选项实际上都有值否则您还将面临:错误:无法连接到数据库!返回首页
错误[ExceptionError]
不工作:
字符串
工作:
型
yb3bgrhw8#
字符串