我正在使用“mongodb”模块开发 nodejs / mongodb 应用程序。该应用程序启动与
node main.js
在 main.js 中,我连接到 db 并将连接保持在“db”全局变量中。然后在“服务器”的内部方法中使用“db”。我想避免将 'db' 作为全局变量,但没有找到正确的方法。
我当前的 main.js:
var server = require('./lib/server');
var MongoClient = require('mongodb').MongoClient;
var Server = require('mongodb').Server;
var mongoClient = new MongoClient(new Server(HOST, PORT));
db = null;
// Database connection
mongoClient.open(function(err, mongoClient) {
if(!err){
// Database selection
db = mongoClient.db(DB);
// Launch web server
server.start(); // usage of 'db' in this part
} else {
console.log(err.message);
process.exit(1);
}
});
任何想法更清洁的方式?
更新
我终于在 connection.js 中创建了一个模块:
var config = require('../config/config');
var url = 'mongodb://' + config.db.host + ':' + config.db.port + '/' + config.db.name;
var MongoClient = require('mongodb').MongoClient;
var db = null;
module.exports = function(cb){
if(db){
cb(db);
return;
}
MongoClient.connect(url, function(err, conn) {
if(err){
console.log(err.message);
throw new Error(err);
} else {
db = conn;
cb(db);
}
});
}
每次我需要获得连接时,我都会调用:
var connection = require('./connection');
connection(function(db){
// doing some stuff with the db
});
这工作得很好。
这种方法有任何潜在的失败吗?