1. 程式人生 > >Nodejs通過賬號密碼連線MongoDB資料庫

Nodejs通過賬號密碼連線MongoDB資料庫

上週遇到了MongoDB資料庫的資料被全部盜取的情況,沒想到這種事情也發生了在我的身邊,主要因為把MongoDB服務暴露在了外網上面,所以也怪不得誰了,後面決定為MongoDB設定賬號密碼,以下為設定賬號和密碼的全過程,後面還有通過Nodejs連線資料庫的一個坑。
1.建立管理員
首先開啟Mongo服務,然後切換admin資料庫,一開始是沒有這個資料庫的。

> use admin

2.然後建立使用者和密碼:

> db.createUser({user:’root’,pwd:’root1234’,roles:[‘root’]})

3.建立了管理員賬號和密碼之後,然後執行Mongo服務的時候加上 –auth引數:

mongod --dbpath "F:mongodb\data\db" --logpath "F:\mongodb\data\log\MongoDB.log" --auth

4.這時候如果直接登入資料庫,想檢視資料,是看不了的,需要用以下命令才能登入成功,如果打印出來一個’1’,說明登入成功:

> db.auth('root','root1234')
1

到這一步,MongoDB設定賬號密碼就已經完成了,接下來我需要用Nodejs來連線資料庫,我用的是mongoose這個庫,他提供了Schema、Model和Document物件,用起來非常方便,但是當我按照官網的例子來寫時發現並不成功,如下:

var mongoose=require("mongoose")

mongoose.connect('mongodb://root:[email protected]:27017/test');

一直都是報錯,說驗證失敗
這裡寫圖片描述

後面查了很多資料也沒有查到,無奈只有再去研究官方API,在官方API中看到:

mongoose.connect('mongodb://username:[email protected]:port/database?options...');

這是官網連線的例子,後面有一個options引數,我懷疑這裡是否需要寫一些引數,但是在實際的例子中沒有看到後面寫任何引數,然後找到官網中對於options的說明,如下:
這裡寫圖片描述


看到第一個引數authSource,他的描述是:If the database authentication is dependent on another databaseName. 他的意思是如果資料庫認證需要依賴於另外一個數據庫名稱。我想了想,我們的資料庫賬號密碼不是儲存admin資料庫嘛,而我們現在需要連線的是另外一個數據庫,可以試著加這個引數看看,就是authSource=admin。果然,加上這個引數之後,就可以成功的連線上資料庫了,看來還是官網文件靠譜,遇到問題一定要先看看官方文件說明,很多問題有可能就解決了。
以上就是Nodejs連線設定了賬號密碼的MongoDB資料庫的一些坑,在網上沒有看到解決方案,希望大家看到了有所啟示。