NodeJS / ExpressJS模拟多个环境

时间:2015-06-13 13:17:24

标签: javascript node.js express

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

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

有人可以建议如何同时运行多个环境吗?

1 个答案:

答案 0 :(得分:2)

一个环境(几乎)对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上的生产实例)。