Node.js 如果设置了databasename,Mongoose将超时

Node.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

我对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: "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