Node.js 如果设置了databasename,Mongoose将超时
我对Linux、NodeJs和MongoDB比较陌生,但我设置了一个运行MongoDB(db版本v4.0.16)的Linux服务器 我添加了两个这样的用户。一个叫mongo admin,一个叫mongo rootNode.js 如果设置了databasename,Mongoose将超时,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我对Linux、NodeJs和MongoDB比较陌生,但我设置了一个运行MongoDB(db版本v4.0.16)的Linux服务器 我添加了两个这样的用户。一个叫mongo admin,一个叫mongo root # mongo > use admin > db.createUser({ user: "mongo-admin", pwd: "myAwesomePassword", roles: [ { role: "userAdminAnyDataba
# mongo
> use admin
> db.createUser({
user: "mongo-admin",
pwd: "myAwesomePassword",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})
> db.createUser({
user: "mongo-root",
pwd: "myAwesomePassword",
roles: [ { role: "root", db: "admin" } ]
})
然后我在/etc/mongod.conf中像这样启用了身份验证
security:
authorization: "enabled"
在我的开发机器上,我设置了一个小NodeJS脚本,尝试使用mongoose连接到服务器,然后简单地在那里添加一个文档
现在情况很奇怪。如果我使用mongodb://mongo-root:myAwesomePassword@100.100.100.100:27017
作为一个连接字符串,一切正常,将创建一个名为test
的新数据库并添加文档。但只要我在字符串末尾添加一个/mydatabasename
,mongoose就会在尝试连接30秒后突然超时
如果我使用名为Robo3T的软件连接到MongoDB,我可以很好地连接,并且我还拥有创建新数据库的权限
我还检查了/etc/log/mongod.log
,发现了以下错误:
2020-02-05T07:40:22.006+0000 I ACCESS [conn27] SASL SCRAM-SHA-1 authentication failed for mongo-root on mydatabasename from client 101.101.101.101:51270 ; UserNotFound: Could not find user mongo-admin@mydatabasename
这是我连接数据库的方式
mongoose.connect(
"mongodb://mongo-root:myAwesomePassword@100.100.100.100:27017/mydatabasename",
{
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true
}
);
看起来mongodb在数据库中寻找用户,而不是在管理数据库中。检查
/数据库
可选。要验证连接是否正确的数据库的名称
字符串包括以下形式的身份验证凭据:
用户名:password@. 如果未指定/database,则连接
字符串包括凭据,驱动程序将向管理员进行身份验证
数据库另请参见authSource
authSource
指定与用户凭据关联的数据库名称。
authSource默认为连接中指定的数据库
字符串
实际上,对于这一点,文档不是100%正确的,连接字符串必须如下所示:
mongodb://mongo-root:myAwesomePassword@100.100.100.100:27017/mydatabasename?authSource=admin
你在用mongodb Atlas吗?对不起,我不太清楚那是什么。在我的Linux服务器上,我安装了MongoDB社区版。我不依赖任何其他平台。太好了,谢谢!这就成功了。我正在查看mongoose文档,其中没有详细解释连接字符串。
mongodb://mongo-root:myAwesomePassword@100.100.100.100:27017/mydatabasename?authSource=admin