最近公司的项目涉及到使用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('链接成功'); } });