2014-01-05 2 views
2

Как совместно использовать соединение с базой данных через различные модули NodeJS? Пример, который я нашел, имел монолитную структуру, где весь код находился в одном файле app.js.Шаблон проектирования для общего дескриптора базы данных в Node.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!"); 
} 

Как получить доступ к «mysql» из моего модуля «foo»? Какова рекомендуемая схема проектирования для этого?

+0

Кажется, что [этот ответ] (http://stackoverflow.com/a/10328308/574501) - это то, что вы ищете. – zaan

ответ

3

Вы можете использовать шаблон модуля, чтобы легко передать свой объект 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++. Вы можете даже моделировать «частные» методы/параметры.

0

Обычно я использую дескриптор mysql в другом файле (модуле) и требую, чтобы модуль находился в разных маршрутах.

Я считаю, что вам также необходимо подключиться к mysql асинхронно, вы можете обратиться к this question, который использует функцию обратного вызова для решения проблемы.

+0

Насколько я знаю, MongoClient.connect() автоматически создает пул соединений. Как вы относитесь к этому https://github.com/mscdex/node-mariasql - если у вас есть опыт здесь? – user3033490

Смежные вопросы