Database Node.JS中共享数据库句柄的设计模式

Database Node.JS中共享数据库句柄的设计模式,database,node.js,design-patterns,Database,Node.js,Design Patterns,如何在各个NodeJS模块之间共享数据库连接?我发现的示例都有一个整体结构,其中整个代码都在一个app.js文件中 /* main.js */ var foo = require("./foo"); /* express stuff ...*/ mysql = /* establish mysql connection */ app.get("/foo", foo.hello ); /* foo.js */ exports.hello = function(req, res) {

如何在各个NodeJS模块之间共享数据库连接?我发现的示例都有一个整体结构,其中整个代码都在一个app.js文件中

/* main.js */
var foo = require("./foo"); 
/* express stuff ...*/
mysql = /* establish mysql connection */ 
app.get("/foo", foo.hello ); 


/* foo.js */
exports.hello = function(req, res) {
   res.send("Hello from the foo module!"); 
}

如何从模块“foo”访问“mysql”?推荐的设计模式是什么

我通常将mysql句柄放在不同的文件(模块)中,并要求在不同的路由中使用该模块


我相信您还必须异步连接到mysql,您可以参考,它使用回调函数来解决问题。

您可以使用模块模式轻松地将db对象(以及任何其他对象)传递给需要它的模块

// users.js
module.exports = function( options ) {
    var db = options.db;
    var pants = options.pants;  // or whatever

    return {
        GetUser: function( userID, callback ) {
            db.query("....", function (err, results) {
                callback(results)
            });
        },
        AnotherFunc: function (...) {},
        AndAnotherFunc: function (...) {}
    };
};
您使用此模块的方式如下:

// make your db connection here

var users = require('./users.js')({
    db: db,
    pants: 'blue'
});

users.GetUser( 32, function( user ) {
    console.log("I got the user!");
    console.log( user );
});

<>我发现这是编写模块的好方法,因为它很像制作一个实际的类对象,就像C++一样。您甚至可以模拟“私有”方法/参数。

这似乎就是您要寻找的。据我所知,MongoClient.connect()会自动创建一个连接池。如果你在这里有经验的话,你是如何做到这一点的?