Node.js 在express/Node中使用mysql:使用globals可以吗?

Node.js 在express/Node中使用mysql:使用globals可以吗?,node.js,activerecord,express,Node.js,Activerecord,Express,我可以很容易地使用以下方法将express配置中的新连接连接到数据库: global.db = new DB.adapter({}); 因此,我可以在我希望创建的任何模型中访问它。(我正在与express一起使用和mysql) 然而,这在某种程度上是不是a)不安全,b)坏习惯 我不认为这是不安全的,但通常使用globals是不好的做法: 包括不需要的DB global模块。没什么大不了的,但是有点不干净 将特定DB实例与确实需要它的模块紧密耦合。 使测试更加困难 使更改特定模块的不同DB变得

我可以很容易地使用以下方法将express配置中的新连接连接到数据库:

global.db = new DB.adapter({});
因此,我可以在我希望创建的任何模型中访问它。(我正在与express一起使用和mysql)


然而,这在某种程度上是不是a)不安全,b)坏习惯

我不认为这是不安全的,但通常使用globals是不好的做法:

  • 包括不需要的DB global模块。没什么大不了的,但是有点不干净
  • 将特定DB实例与确实需要它的模块紧密耦合。
    • 使测试更加困难
    • 使更改特定模块的不同DB变得更加困难
  • 相反,只使用CommonJS要容易得多,CommonJS内置在节点中,非常易于使用

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

    我不认为这是不安全的,但通常使用globals是不好的做法:

  • 包括不需要的DB global模块。没什么大不了的,但是有点不干净
  • 将特定DB实例与确实需要它的模块紧密耦合。
    • 使测试更加困难
    • 使更改特定模块的不同DB变得更加困难
  • 相反,只使用CommonJS要容易得多,CommonJS内置在节点中,非常易于使用

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

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

    <强>坏实践< /强>:一些测试框架甚至认为这是一个错误(例如,MOCHA,但这是可配置的)。您处于CommonJS环境中,所以请使用模块!这样,当

    require()
    ing该模块时,您的连接对象就不会丢失,这是我所知道的。

    两者都有

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

    <强>坏实践< /强>:一些测试框架甚至认为这是一个错误(例如,MOCHA,但这是可配置的)。您处于CommonJS环境中,所以请使用模块!这样,当

    require()
    ing该模块时,您的连接对象就不会丢失,这是我所知道的