发现我这种新手在使用过程中会遇到了很多不懂的坑,那么,Node如何通过账号密码连接远程MongoDB数据库?下面就是自己找到解决方法的路程,废话可能有点多,个人笔记凑合着看吧。

之前node连接的数据库都是在本地电脑,由于不设账户和密码,也比较简单,使用的是mongoose,如下写就可以了。

var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/mydbName');

之后也就没过多关注这方面了,最近弄了台阿里云服务器,就想连接到远程MongoDB数据库,开始进行安装和配置,完成后,开始给MongoDB设置权限和创建用户,如下例子:

1、创建管理员账户

use admin
db.createUser({user:"admin", pwd: "123456", roles: ["root"]})
db.auth("admin", "123456") 

2、添加业务数据库账户

比如自己的业务数据为myMall。

use myMall
db.createUser({user: "myName", pwd: "123456", roles: [{ role: "dbOwner", db: "myMall" }]})
db.auth("myName", "123456") 

dbOwner:表示在当前数据库中可以执行任意操作

然后外网和本地用Robo 3T软件链接试试都是可以的,阿里云外网配置可以看查看如下相关文章

centos7服务器外网无法连接mongodb的解决方法

完成这些后,开始在node代码中,用给myMall创建的账户链接到远程数据库myMall,如下:

mongodb://myName:123456@xx.xxx.xxx.xx:27017/myMall

然后发现一直连接不对,出现权限认证问题,MongoError: Authentication failed。

网上搜索了一下,说需要加上authSource=admin,不过对于我这种新手来说,没实例demo,看得也不是很明白,可能跟自己设置的账户也不一样吧。当时天真地以为加上就可以了,如下:

mongodb://myName:123456@xx.xxx.xxx.xx:27017/myMall?authSource=admin

发现还是一样报错,只能翻官方的文档了,确实找到了authSource的说明文档:

connections-connection-options


本人属于英语文盲,有点看不懂,只能翻译了,翻译过来大概懂一点了,改为上面为admin数据库创建的管理员账户和密码,就成功了,如下

mongodb://admin:123456@xx.xxx.xxx.xx:27017/myMall?authSource=admin
以上就是自己寻找Node通过账号密码连接到远程服务器的MongoDB数据库的方法的路程,在此做个笔记,其实最后一看是不是是很简单的,一个账户密码而已,不过对我这种新手来说,还有很多东西是不懂的,不过总算又可以愉快的玩耍了。

最后说一下自己安装的MongoDB是4.0版本。