如何为每个应用设置不同的Node.js环境

时间:2014-03-17 11:11:22

标签: node.js environment

方案

  • Node.js在具有Ubuntu Server OS的服务器上运行
  • 在此服务器上运行 4个不同的节点应用
  • Nginx 已安装并使用作为代理,因此第一个应用正在8082端口上侦听第二个8082,依此类推,但用户可以使用标准访问港口(80/443)
  • 应用程序在永久
  • 下运行

问题

每个应用可能设置 不同的环境

例如,我想以不同的方式设置环境MYSQL_USER。 每个应用都有一个config.js,其中包含如下字符串:

exports.mysql_user = process.env.MYSQL_USER || 'devuser';

我看到可以添加一些模块来管理外部env文件。 如果可能的话,我想管理没有模块

有办法做到这一点吗?

我看到有可能以这种方式加载ENV:

ENV_1="first value" ENV_2="second value" node app.js

或(在我的情况下)

ENV_1="first value" ENV_2="second value" forever start app.js

结论

  • 可以自动执行此操作吗?
  • 这种方法有禁忌症吗?
  • 最好使用其他解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果您想将环境变量传递给NodeJS,是的,您可以使用process.env (link)访问环境。还有process.argv (link),它的工作方式类似。这些可以在批处理或启动脚本中使用(尽管小心重叠环境,正常情况下)。

在代码中使用它非常简单:

var port = 3000;
switch( process.env.ENV_1 )
{
  case "devuser":
    port = 3001;
    break;
  case "admin":
    port = 3002;
    break;
}
console.log("Starting app as '"+ process.env.ENV_1 +"' on port " + port );
process.exit(0);

可以直接从命令行运行:

> ENV_1=devuser node test.js; ENV_1=admin node test.js
Starting app as 'devuser' on port 3001
Starting app as 'admin' on port 3002

论证版本。请注意索引用于此目的 - 与上面的代码相同,但switch代替process.argv[2]

运行如下:

> node test.js devuser; node test.js admin
Starting app as 'devuser' on port 3001
Starting app as 'admin' on port 3002