2012-05-29 95 views
8

我在Ubuntu 12.04上,我只是在了解环境变量。我正尝试从我的应用程序中读取自定义变量,但始终显示为undefined。下面是我的测试应用程序的代码:无法在我的nodejs应用程序中读取我的环境变量

// app.js 

console.log('Value: ' + process.env.NODE_ENV); 

如果我运行下面的命令,你会看到变量的值:

$ NODE_ENV=production 
$ echo $NODE_ENV 
production 

我可以echo $NODE_ENV一整天,它会继续表现我“生产”,但是当我在我的节点应用程序中执行process.env.NODE_ENV时,它始终显示“未定义”。

$ node app.js 
Value: undefined 

这里是奇数部分不过,如果我显示另一个环境变量,我知道已经存在,说process.env.PATH,那么它的工作原理。

$ node app.js 
Value: /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

另一个怪癖是命令printenv list似乎并没有包含我的自定义变量NODE_ENV尽管echo $NODE_ENV显示我正确的值。 printenv NODE_ENV没有显示任何内容,但是printenv PATH显示了正确的值,就像在我的节点应用程序中访问PATH时一样。

任何帮助,非常感谢。

回答

20

您需要export shell变量才能使它们可用于您在shell中执行的进程。

比较此命令的输出:

FOO=bar; bash -c 'echo $FOO' 

与此输出:

export FOO=bar; bash -c 'echo $FOO' 
0

你可能要考虑使用库来管理应用程序的配置。

例如nconf中有助于通过

  • 命令行变元的管理配置
  • 环境变量
  • 文件
  • 等。

并查看源是好学的方法https://github.com/flatiron/nconf

5

我在这里找到了一些真正愚蠢的东西。

我刚刚添加了新的导出变量,但我的节点进程仍然没有看到它们。然后我意识到重启节点进程是不够的 - 我不得不打开一个新的终端(即.bash实例)。一旦我这样做,它工作得很好:)

相关问题