节点.js - 是仅初始化一次的模块

Node.js - are modules initialised only once?

本文关键字:一次 模块 js 初始化 节点      更新时间:2023-09-26

我正在为node.js应用程序使用node-mysql驱动程序。我不必为每个类似模型的模块一遍又一遍地设置 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 仅使用 DB 连接初始化一次。因此,随后使用了相同的client对象...如何构建数据库.js以便当我从模型中需要它时,每次设置新的数据库连接时?我知道这与使用new有关,但我无法理解它。

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来定义具有自定义 getter 逻辑的exports,以便您可以根据需要执行var db = require("./DB")