2012-05-29 9 views
8

Ich bin auf Ubuntu 12.04 und ich lerne gerade über Umgebungsvariablen. Ich versuche, eine benutzerdefinierte Variable aus meiner Anwendung zu lesen, aber sie wird immer als undefined angezeigt. Hier ist der Code meiner Test-App:Ich kann meine Umgebungsvariable in meiner Nodejs App nicht lesen

// app.js 

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

Wenn ich die folgenden Befehle ausführen, werden Sie sehen, dass die Variable einen Wert hat:

$ NODE_ENV=production 
$ echo $NODE_ENV 
production 

Ich kann echo $NODE_ENV den ganzen Tag und es wird auch weiterhin zeigen, ich "Produktion", aber wenn ich process.env.NODE_ENV in meiner Knoten-Anwendung mache, zeigt es immer "undefined" an.

$ node app.js 
Value: undefined 

Hier ist der ungeradee Teil aber, wenn ich eine andere Umgebungsvariable anzuzeigen, die ich kenne bereits vorhanden ist, sagen process.env.PATH, dann funktioniert es.

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

Eine weitere Marotte ist, dass der Befehl printenv list nicht meine benutzerdefinierten Variablen zu enthalten scheint NODE_ENV trotz der Tatsache, dass echo $NODE_ENV zeigt mir den richtigen Wert. printenv NODE_ENV zeigt nichts, aber printenv PATH zeigt den richtigen Wert, so wie es getan hat, als ich auf PATH in meiner Knoten-Anwendung zugegriffen habe.

Jede Hilfe wird sehr geschätzt.

Antwort

20

Sie müssen export Shell-Variablen, um sie für Prozesse zur Verfügung zu stellen, die Sie in Ihrer Shell ausführen.

Vergleichen Sie die Ausgabe dieses Befehls:

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

mit dem Ausgang dieses:

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

Sie können eine Bibliothek für die Verwaltung von App-Konfiguration zu betrachten.

Zum Beispiel NConf hilft Konfiguration verwalten durch

  • Befehlszeile argumets
  • Umgebungsvariablen
  • Dateien
  • etc ..

und Blick auf die Quelle a nette Art zu lernen https://github.com/flatiron/nconf

5

Ich fand mich hier von etwas wirklich albern.

Ich hatte gerade die neuen exportierten Variablen hinzugefügt, aber mein Knotenprozess sah sie noch nicht. Dann erkannte ich, dass es nicht genug war, den Knotenprozess neu zu starten - ich musste auch ein neues Terminal (dh eine Bash-Instanz) öffnen. Sobald ich das getan habe, hat es funktioniert :)

Verwandte Themen