#javascript #node.js #commonjs
#javascript #node.js #commonjs
Вопрос:
Я использую драйвер node-mysql для node.js приложение. Вместо того, чтобы снова и снова настраивать соединение с mysql для каждого из моих модельных модулей, я делаю это:
// DB.js
var Client = require('mysql').Client;
var DB_NAME = 'test_db';
var client = new Client();
client.user = 'user';
client.password = 'pass';
client.connect();
client.query('USE ' DB_NAME);
module.exports = client;
// in User.js
var db = require("./DB");
// and make calls like:
db.query(query, callback);
Теперь я замечаю, что DB.js инициализируется подключением к БД только один раз. Итак, впоследствии используется один и тот же client
объект… Как мне структурировать DB.js таким образом, когда я требую этого от модели, каждый раз будет устанавливаться новое подключение к БД? Я знаю, что это как-то связано с использованием new
, но я не могу обмозговать это.
Ответ №1:
module.exports = function() {
var client = new Client();
client.user = 'user';
client.password = 'pass';
client.connect();
client.query('USE ' DB_NAME);
return client;
}
var db = require("./DB")()
Инициализируйте нового клиента каждый раз, когда вы вызываете базу данных.
Вы могли бы использовать Object.defineProperty
для определения exports
пользовательской логики получения, чтобы вы могли делать var db = require("./DB")
, если хотите.
Комментарии:
1. В конце функции должно быть
return client;
. В противном случаеdb.query()
не будет работать.2. @jeffreyveon не могу поверить, что никто не заметил такую очевидную ошибку. Спасибо.