gpt4 book ai didi

javascript - 有什么理由不将配置绑定(bind)到 Node.js 中的全局对象?

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:20 25 4
gpt4 key购买 nike

我正在寻找在我的 Node 应用程序中使用全局配置设置的最佳方法。按照(我的)偏好的顺序,我发现的方法是:

  1. 将配置附加到全局对象

    global.config = {
    db: require('./config/db'),
    server: require('./config/server'),
    session: require('./config/session'),
    auth: require('./config/auth')
    };
  2. 将配置对象传递给需要它的模块。

    var config = {
    db: require('./config/db'),
    server: require('./config/server'),
    session: require('./config/session'),
    auth: require('./config/auth')
    };
    var responder = require('./responder')(config);
  3. 每个模块中都需要配置文件。因为我通常将配置分成单独的文件,所以我真的不喜欢这样做。由于我并不总是使用某些文件,这通常还涉及检查文件是否存在。

有什么理由应该避免使用这些方法中的任何一种吗?是否有任何理由表明其中一个应该优于其他?

最佳答案

根据我的经验,使用选项否是常见的用法和良好的风格。 2:将配置选项传递给需要它的模块您建议的。

原因:

  • 它将配置与实际逻辑分离。如果您在其中包含配置文件模块本身,对一个特定配置文件有不必要的依赖。
  • 仍然存在对作为参数提供的特定配置值的定义依赖 - 而不是“神奇地”从全局命名空间中提取,这使得代码难以阅读、维护和测试。

顺便说一下,这是几乎所有语言的经验法则,它允许全局变量/对象和构造来包含“您喜欢的任何地方”。但是,requirejs 已经将您推向了正确的方向,至少允许 Exports 成为立即接受配置的函数。因此,单行代码是一种请求和配置资源的优雅方式。

除此之外的所有内容都可能最终会成为有关依赖注入(inject) (DI) 概念的讨论 - 这是一个单独的主题。

关于javascript - 有什么理由不将配置绑定(bind)到 Node.js 中的全局对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23627795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com