我正在构建一个更大的Web应用程序,其中路由被分成单独的文件。 所有路由都需要连接到db,因此所有路由都需要mongoskin,这是我用于MongoDb的模块。像这样:
var mongo = require('mongoskin');
但是在我意识到只需要mongoskin不足以使路线能够与数据库通信之后不久。因为在我的主app.js文件中,我还进行了额外的"配置"。
db = mongo.db('mongodb://localhost/dbName', {native_parser:true});
db.open(function(err) {
if (!err) {
console.log('Connected to mongodb://localhost/dbName');
}
});
db.bind('clients');
db.bind('invoices');
我需要共享此db对象...
我的第一次尝试是将路由文件包装在带有参数的导出函数中。当我在主app.js中需要routes.js时传入此参数。这很好,但我并不是真的喜欢这个解决方案......我觉得它变得有点乱。
我现在正在使用的第二种方法是创建整个db对象的单独模块。
var mongo = require('mongoskin');
var db = null;
module.exports = {
initAndGetDb: function () {
db = mongo.db('mongodb://localhost/dbName', {native_parser:true});
db.open(function(err) {
if (!err) {
console.log('Connected to mongodb://localhost/dbName');
}
});
db.bind('clients');
db.bind('invoices');
return(db);
},
getDb: function () {
return(db);
}
};
在我的主app.js
var db = require('./db').initAndGetDb();
在我的routes.js
中var db = require('../db').getDb();
问题:这种方法是一种很好的工作解决方案,用于共享数据库连接(以及其他类似的方式)吗?如果你能看到任何问题,请告诉我......
答案 0 :(得分:2)
总的来说,我觉得这很好,但你可以将它简化为:
//your db.js module
var mongo = require('mongoskin');
var db = mongo.db('mongodb://localhost/dbName', {native_parser:true});
db.bind('clients');
db.bind('invoices');
db.open(function(err) {
if (err) {
console.error('Could not connect to db', err);
return;
}
console.log('Connected to mongodb://localhost/dbName');
});
module.exports = db;
第一次代码执行require("./db");
时,db.js
中的顶级代码将运行并连接到数据库。当其他模块需要它时,他们将无需重新运行顶级代码并重新连接即可访问数据库。
请注意,要真正做好生产准备,您需要通过以下方式加强: