【问题标题】:Node.js - are modules initialised only once?Node.js - 模块是否只初始化一次?
【发布时间】:2011-05-10 17:56:17
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js commonjs


    【解决方案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 定义带有自定义getter 逻辑的exports,以便您可以根据需要使用var db = require("./DB")

    【讨论】:

    • 函数末尾应该有一个return client;。否则,db.query() 将不起作用。
    • @jeffreyveon 无法相信没有人会犯下如此明显的错误。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 2011-12-06
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2019-07-15
    • 2016-04-29
    相关资源
    最近更新 更多