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);
连接.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 对我来说太过分了)?另外我如何处理项目中的连接?