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);
connection.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);
});
});
}
}
上記のコードを使用すると、サーバーがクラッシュし、リクエストが2回目に受信されても、データベース接続が開いたままになっているため、Users.create関数にdb.closeを追加します。
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はやり過ぎになります)。また、プロジェクトで接続を処理するにはどうすればよいですか?