Node.js - 模块只初始化一次吗?

发布于 2024-11-06 10:00:41 字数 568 浏览 0 评论 0原文

我正在为 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 仅使用数据库连接初始化一次。因此,随后使用相同的 client 对象...我如何构建 DB.js,以便当我从模型中需要它时,每次都会建立一个新的数据库连接?我知道这与使用 new 有关,但我无法理解它。

I am using node-mysql driver for a node.js app. Instead of having to set-up the mysql connection over and over again for each of my model-like modules, I do this:

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

Now, I notice that DB.js is initialised with the DB connection only once. So, subsequently the same client object is being used... How do I structure DB.js such that when I require it from a model, every time a new DB connection will be set-up? I know it's got something to do with using new, but I am not able to wrap my head around it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

¢蛋碎的人ぎ生 2024-11-13 10:00:41
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") if你想要的。

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")()

Initialize a new client each time you call the database.

You could use Object.defineProperty to define exports with custom getter logic so you can do var db = require("./DB") if you want.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文