Node.JS中共享数据库句柄的devise模式

如何通过各种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”? 什么是这个build议的devise模式?

您可以使用模块模式轻松地将您的数据库对象(和其他任何东西)传递给需要它的模块。

 // 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 ); }); 

我觉得这是编写模块的好方法,因为这很像制作实际的Class对象,就像在C ++中一样。 你甚至可以模拟“私人”的方法/参数。

我通常把MySQL句柄放在一个不同的文件(模块),并要求在不同的路线模块。

我相信你也必须asynchronous连接到mysql,你可以参考这个问题 ,它使用callback函数来解决问题。