前言
最近公司的项目涉及到使用Nodejs+Express的一些业务,其中涉及到使用mongodb的连接问题。默认情况下linux上安装的mongodb有以下缺点:
1.不能远程访问
2.没有验证情况,任何人都能登录
解决以上问题:请参考
《Mongodb安全认证 - 给指定的数据库添加用户》
当然,我们主要解决NodeJs连接问题:
一.创建数据库管理员
(1)我们首先就要建立一个超级管理员,然后再用超级管理员建立其他帐号:
>use admin
>db.addUser( { user: "root", pwd: "admin", roles: [ "userAdminAnyDatabase" ] } )
#角色默认是admin,我们可以通过 show roles命令查看所有可选角色
(2)为帐号启用admin数据库认证,这样他就可以操作admin数据库了。
>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
二.使用Nodejs+Express连接
默认情况下,express需要安装 mongo组建
>sudo npm install mongodb
然后我们连接我们指定的数据库express
普通方式连接mongodb
参考《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连接mongodb
参考
《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('连接成功');
}
});