轉自https://blog.csdn.net/szu_lzz/article/details/77435804#commentBox
1.創建管理員
首先開啟Mongo服務,然后切換admin數據庫,一開始是沒有這個數據庫的。
> use admin
- 1
2.然后創建用戶和密碼:
> db.createUser({user:’root’,pwd:’root1234’,roles:[‘root’]})
- 1
3.創建了管理員賬號和密碼之后,然后運行Mongo服務的時候加上 –auth參數:
mongod --dbpath "F:mongodb\data\db" --logpath "F:\mongodb\data\log\MongoDB.log" --auth
- 1
4.這時候如果直接登錄數據庫,想查看數據,是看不了的,需要用以下命令才能登錄成功,如果打印出來一個’1’,說明登錄成功:
> db.auth('root','root1234') 1
- 1
- 2
到這一步,MongoDB設置賬號密碼就已經完成了,接下來我需要用Nodejs來連接數據庫,我用的是mongoose這個庫,他提供了Schema、Model和Document對象,用起來非常方便,但是當我按照官網的例子來寫時發現並不成功,如下:
var mongoose=require("mongoose") mongoose.connect('mongodb://root:root1234@localhost:27017/test');
- 1
- 2
- 3
一直都是報錯,說驗證失敗
后面查了很多資料也沒有查到,無奈只有再去研究官方API,在官方API中看到:
mongoose.connect('mongodb://username:password@host:port/database?options...');
- 1
這是官網連接的例子,后面有一個options參數,我懷疑這里是否需要寫一些參數,但是在實際的例子中沒有看到后面寫任何參數,然后找到官網中對於options的說明,如下:
看到第一個參數authSource,他的描述是:If the database authentication is dependent on another databaseName. 他的意思是如果數據庫認證需要依賴於另外一個數據庫名稱。我想了想,我們的數據庫賬號密碼不是存儲admin數據庫嘛,而我們現在需要連接的是另外一個數據庫,可以試着加這個參數看看,就是authSource=admin。果然,加上這個參數之后,就可以成功的連接上數據庫了,看來還是官網文檔靠譜,遇到問題一定要先看看官方文檔說明,很多問題有可能就解決了。
以上就是Nodejs連接設置了賬號密碼的MongoDB數據庫的一些坑,在網上沒有看到解決方案,希望大家看到了有所啟示。