问题就是,我用node-mongodb-native连接上mongodb之后,默认打开了一个有五个连接的连接池,但是这5个连接在几分钟后自动就关闭了 这个是mongodb的配置文件 这个是mongodb的log日志
这个是我的base_mongodb.js文件
var MongoClient = require('mongodb').MongoClient
, ObjectId = require('mongodb').ObjectID
, assert = require('assert')
, Util = require('./util')
, db;
module.exports = function(){
var self = this;
this.findOneById = function(tableName,id,callback){
connection(function (db) {
db.collection(tableName,function(err,collection){
var mongoId = ObjectId(id);
var cursor = collection.find({'_id':mongoId});
cursor.toArray(function(err,docs){
if(err){
callback(false);
}else{
callback(docs);
}
cursor.rewind();
});
});
})
};
/**
* 连接mongodb
* @param callback
*/
function connection(callback){
if(!db){
var dbConfig = Util.get('config.json','db');
var host = dbConfig['host']
, user = dbConfig['user']
, password = dbConfig['password']
, port = dbConfig['port']
, db_name = dbConfig['db_name']
, authSource = dbConfig['authSource'];
var url = 'mongodb://'+user+':'+password+'@'+host+':'+port+'/'+db_name+'?authSource='+authSource;
MongoClient.connect(url,function(err,dbObject){
assert.equal(null,err);
console.log('Connect to MongoDB success~');
db = dbObject;
callback(db);
});
}else{
callback(db);
}
}
}
这个是我的http.js文件
var http=require('http')
, BaseMongodb = require('./base_mongodb')
, baseMongodb = new BaseMongodb();
http.createServer(function(req,res){
res.writeHead(200,{"Content-type":"text/html;charset=utf-8"});
switch (req.url)
{
case '/':
baseMongodb.findOneById('node_booki','5574fc1055608daf0b789f38',function(ret){
if(ret)
res.end(JSON.stringify(ret));
else
res.end('222');
});
break;
}
}).listen(3000);
console.log("浏览器打开http://127.0.0.1:3000");
@xuguoliangjj 你的这个url拼接模型在哪里看到的? var url = 'mongodb://’+user+’:’+password+’@’+host+’:’+port+’/’+db_name+’?authSource=’+authSource;
http://mongodb.github.io/node-mongodb-native/2.0/api/MongoClient.html官方的demo中url和用户名密码是分开的,而且authSource这个目前我也没有发现。你的驱动程序版本是多少?
@haozxuan 2.0.33 官方的是这样的
// Connection URL
var url = 'mongodb://dave:password@localhost:27017/myproject';
authSource
是通过通过哪个集合来验证账号密码啊,我的账号密码是在admin
里的,所以authSource=admin
@xuguoliangjj 恩,你的这种写法是“Indirectly Against Another Database”,你可以尝试不设置身份验证测试下,看是否会自动断线。因为我调查的结果是并没有相关api会自动断开。
@wldlzt 什么启动方式?/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf
我就是这么启动的,配置文件上面有图片