使用带有express / Node的mysql:使用globals好吗?

时间:2014-03-17 13:08:05

标签: node.js activerecord express

我可以使用以下方法轻松地将我的快速配置中的新连接附加到数据库:

global.db = new DB.adapter({});

因此,我可以在任何我希望创建的模型中访问它。 (我使用active record和mysql with express)。

然而,这是否以任何方式a)不安全,b)不良做法?

2 个答案:

答案 0 :(得分:2)

我认为这不安全,但一般使用全局变量是不好的做法:

  1. 包括不需要它的模块的DB全局。没关系太多,但有点不干净。
  2. 将特定数据库实例与需要的模块紧密耦合。
    • 使测试更加困难
    • 为特定模块更改为其他数据库变得更加困难。
  3. 相反,只使用内置于节点中且易于使用的CommonJS要容易得多。

    // db.js
    module.exports = new DB.adapter({});
    
    //index.js
    var db = require("./db");
    

答案 1 :(得分:2)

两个

不安全:任何模块都可以更改全局上下文。与任何其他软件包存储库一样,NPM中可能存在邪恶的程序员。

糟糕的做法:有些测试框架甚至将此视为错误(例如,Mocha,但这是可配置的)。你在CommonJS环境中,所以使用模块!这样做,require()该模块就不会丢失您的连接对象,我知道这一点。