【问题标题】:NodeJS / ExpressJS Multiple environments simulatenouslyNode JS / Express JS 多个环境同时进行
【发布时间】:2015-08-29 09:51:04
【问题描述】:

我的 NodeJS 项目需要多个环境。例如。坐/质量保证/生产。我已经设置了配置文件(例如 qa.js),指定使用哪个端口和哪个数据库等。我的启动脚本根据环境设置 NODE_ENV,然后我通过执行“npm start”启动它。

这适用于单个环境,它在它应该启动的端口上启动,一切都很好。但是,当我开始另一个环境时,第一个环境停止工作。我认为这与 NODE_ENV 已更改的事实有关,还是其他原因? NODE_ENV 是否仅在您第一次运行 npm start 时或之后才重要?

谁能告诉我如何同时运行多个环境?

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    环境对于 Express 来说(几乎)没有什么特别之处。您可以将其用作选择机制,根据NODE_ENV 的值设置特定配置,就像您现在所做的那样。

    从概念上讲,你应该这样想:

    if (NODE_ENV === 'qa') {
      // set configuration for qa
    } else if (NODE_ENV === 'production') {
      // set configuration for production
    } else
      // set configuration for development/testing/...
    }
    

    如您所见,这意味着您一次只能使用一个环境。如果您设置 production 环境,它将使用该环境的配置,没有别的

    在单个进程中同时运行多个环境违背了NODE_ENV 的全部目的。但是,您可以在一定程度上运行应用程序的多个不同版本,每个版本都在单独的环境中运行(以下假设您使用的是某种 Unix 环境):

    // start qa version
    $ env NODE_ENV=qa npm start
    
    // in another window, start production version
    $ env NODE_ENV=production npm start
    

    我说“在一定程度上”,因为不可能有两个不同的进程监听同一个 TCP 端口。因此,您的环境需要考虑到这一点(例如,让 QA 实例在端口 3000 上侦听,生产实例在 3001 上侦听)。

    【讨论】:

    • 这正是我所做的。我有 NODE_ENV 的这些代码块,并且我有不同的 env 文件(例如 qa.js),它们指定了不同的 TCP 端口。我的问题是当我启动第二个时,第一个不复存在。即使我使用新终端进行 SSH 连接,也会出现同样的问题。你能建议吗?否则如何开始新的环境,肯定之前已经做过,通常总是需要多个环境?
    • 我不太明白您所说的“不再存在”是什么意思。进程是否停止或崩溃?当它崩溃时,您应该知道原因。
    猜你喜欢
    • 2015-08-24
    • 2019-06-06
    • 2015-07-31
    • 2018-12-03
    • 2022-01-22
    • 1970-01-01
    • 2022-08-18
    • 2016-06-14
    • 2015-08-14
    相关资源
    最近更新 更多