【问题标题】:Set variables if they've not already been set as environment variables如果尚未将变量设置为环境变量,请设置它们
【发布时间】:2018-09-04 07:56:52
【问题描述】:

我在节点中有一套测试,我想在测试环境中运行。

在开发中我想针对 localhost 运行,但是在容器中运行时我想针对通过 process.env 变量设置的测试环境运行。

有没有办法将主机 URL 全局设置为 localhost,除非它已设置为环境变量?

我知道我可能会编写 if 语句来检查是否设置了 env 变量,但是我想知道是否有围绕此的最佳实践或通用策略。

谢谢

【问题讨论】:

  • 我认为npmjs.com/package/dotenv 对他们如何鼓励您使用他们的软件包以及原因有一些很好的解释。那里的解释应该有望在惯例方面给出一些方向。

标签: node.js docker


【解决方案1】:

您可以检查 env 变量是否可用,如果不可用,请将其设置为 localhost。示例

if (!process.env.servicehost) {
    process.env.servicehost='localhost';
}

建议您将其封装到返回基本服务 url 的方法中。示例:https://testhost.com/myApi 然后您的测试套件可以连接到特定的 API 路径。使用上述方法在您的启动阶段创建此基础服务 url。

【讨论】:

    【解决方案2】:

    根据十二要素应用程序原则,最好的方法是将应用程序配置存储在环境变量中,而不是应用程序配置或类似的东西中,尤其是在您使用 Docker 时。也许你应该从两个选项中使用最好的,例如:

    const URI = process.env.URI || 'localhost';
    

    【讨论】:

      【解决方案3】:

      这里没有任何最佳实践,因为最佳实践很大程度上取决于您的开发/生产管道。

      一种方法是使用global 对象:

      global.host = process.env.testhost || localhost;  // localhost already set to something
      

      如果未定义testhost,这将提供localhost

      现在host(或global.host,如果您愿意)可用于所有模块。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        • 1970-01-01
        • 2013-11-20
        • 2013-04-20
        相关资源
        最近更新 更多