Node.js Mongodb - общий доступ к соединению драйвера
main.js
var http = require('http');
var UserModel = require('./models/user.js');
var server = http.createServer(function(req, res){
UserModel.create({
}), function(e, o){
if(e) { console.log(e); } else {
} console.log(o); }
});
}).listen(3000);
connections.js
var mongo = require('mongodb');
module.exports = {
dbMain: new mongo.Db('main', new mongo.Server('127.0.0.1', 27017, { auto_reconnect: true }, {})),
dbLog: new mongo.Db('log', new mongo.Server('127.0.0.1', 27017, { auto_reconnect: true }, {}))
};
/models/user.js
var mongodb = require('mongodb');
var db = require('./connections.js').dbMain;
module.exports = {
create: function(newData, callback){
db.open(function(e, db){
db.collection('users', function(e, collection){
collection.insert(newData, callback);
});
});
}
}
Когда я использую приведенный выше код, сервер вылетает из-за проблемы, что, во ВТОРОЙ раз, когда приходит запрос, у нас все еще остается соединение с базой данных, поэтому давайте добавим db.close в нашу функцию Users.create.
create: function(newData, callback){
db.open(function(e, db){
db.collection('users', function(e, collection){
collection.insert(newData, function(e, o){
db.close(); // Voila.
callback(e, o);
});
});
});
}
На этом этапе сервер МОЖЕТ аварийно завершить работу, поскольку из-за нескольких открытых соединений я не понимаю, почему и как это может произойти, но это происходит.
Как организовать свой проект в виде моделей (я не хочу использовать Mongoose, моя проверка выполняется в другом слое, а не в модели, поэтому Mongoose будет для меня излишним)? Также как мне обрабатывать соединения в проекте?