最近公司的項目涉及到使用Nodejs+Express的一些業務,其中涉及到使用mongodb的鏈接問題。默認狀況下linux上安裝的mongodb有如下缺點:html
1.不能遠程訪問node
2.沒有驗證狀況,任何人都能登陸linux
解決以上問題:請參考git
《mongodb 實現遠程鏈接》github
《MongoDB 用戶角色受權與AUTH啓用》mongodb
《Mongodb安全認證 - 給指定的數據庫添加用戶》數據庫
固然,咱們主要解決NodeJs鏈接問題:express
(1)咱們首先就要創建一個超級管理員,而後再用超級管理員創建其餘賬號: npm
>use admin >db.addUser( { user: "root", pwd: "admin", roles: [ "userAdminAnyDatabase" ] } ) #角色默認是admin,咱們能夠經過 show roles命令查看全部可選角色
(2)爲賬號啓用admin數據庫認證,這樣他就能夠操做admin數據庫了。api
>db.auth("admin", "admin") #認證賬號 >db.system.users.find(); #查看當前已有的用戶信息
(3)使用用剛纔的超級賬號登陸數據庫(admin)
mongo --host 102.10.123.12 --port 27017 -u 'root' -p 'admin' admin
如今,咱們就能夠爲其餘數據庫添加用戶了:
好比express數據庫
>use express >db.addUser("express"," express123")
授予這個用戶的權限:(必需要,不然沒法進行讀寫操做)
db.auth("express"," express123")
而後退出,直接鏈接express庫的方式是
mongo --host 102.10.123.12 --port 27017 -u 'express' -p 'express123' express
默認狀況下,express須要安裝 mongo組建
>sudo npm install mongodb
而後咱們鏈接咱們指定的數據庫express
參考《mongodb - Db -官方文檔》
var mongodb = require('mongodb'); var server = new mongodb.Server('localhost', 27017, {auto_reconnect:true}); var db = new mongodb.Db('express', server, {safe:true}); db.open(function(err,result){ //注意,必須打開數據庫,而後登陸驗證 db.authenticate('express','express123',function(err,result){ if(!result) { console.log(result); }else{ console.log('成功鏈接到數據庫'); } }); });
固然,以上是舊版的mongodb鏈接驅動,若是是新版(2.0+)的鏈接驅動,那麼咱們可使用MongoClient進行鏈接
參考
《MongoClient connect - 官方文檔》
《Connection String URI Format - 官方文檔》
var MongoClient = require('mongodb').MongoClient, MongoClient.connect('mongodb://localhost:27017/test', function(err, db) { if(!err){ //若是鏈接未出錯 console.log('鏈接成功'); } });
固然,以上在非auth模式下的,在auth模式下,須要將鏈接url進行以下調整
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
咱們這裏鏈接方式以下
var MongoClient = require('mongodb').MongoClient, MongoClient.connect('mongodb://express:express123@102.10.123.12:27017/express', function(err, db) { if(!err){ //若是鏈接未出錯 console.log('鏈接成功'); } });