web-dev-qa-db-de.com

Definieren eines Arrays als Umgebungsvariable in node.js

Ich habe ein Array, aus dem ich Daten abziehe. 

festivals = ['bonnaroo', 'lollapalooza', 'coachella']

Da ich Heroku verwende, kann es besser sein, es durch eine Umgebungsvariable zu ersetzen, aber ich bin mir nicht sicher, wie das geht.

Ist ein JSON-String als Umgebungsvariable der richtige Weg?

19
paranoidhominid

In diesem Szenario klingt es nicht wie eine Env-Variable.

Normalerweise möchten Sie Umgebungsvariablen verwenden, um Ihrer Anwendung Informationen über ihre Umgebung zu geben oder ihr Verhalten anzupassen: mit welcher Datenbank eine Verbindung hergestellt werden soll, welche Authentifizierungs-Token verwendet werden sollen, wie viele Worker sich verzweigen, ob gerenderte Ansichten im Cache gespeichert werden oder nicht usw.

Ihr Beispiel ähnelt eher einem Modell, so dass etwas wie eine Datenbank wahrscheinlich besser passt.

Allerdings gibt es keinen Kontext zu dem, was Ihre App macht oder wie sie festivals verwendet. Wenn sich herausstellt, dass Sie eine Env-Variable verwenden sollten, haben Sie mehrere Optionen. Am einfachsten ist es wahrscheinlich, ein Leerzeichen oder eine durch Kommas getrennte Zeichenfolge zu verwenden:

heroku config:set FESTIVALS="bonnaroo lollapalooza coachella"

dann:

var festivals = process.env.FESTIVALS.split(' ');

Disclosure: Ich bin der Besitzer der Node.js-Plattform bei Heroku

40
hunterloftis

Das hängt wahrscheinlich von Ihren Daten ab. Wenn z. B. keiner der Werte Kommas enthält, können Sie einfach eine durch Kommas getrennte Liste erstellen und dann ein Komma teilen (z. B. Starten Ihrer App mit FOO=bar,baz,quux node myapp.js und Ausführen von var foo = process.env.FOO.split(',') in myapp.js).

Andernfalls, wenn Ihre Eingabewerte komplexer sein können, ist die Verwendung von JSON wahrscheinlich am einfachsten.

3
mscdex

Ihr Beispiel ist eher eine Aufzählung als ein Konfigurationsarray. Ich würde dringend empfehlen, ein Modell zu verwenden, um es zu speichern.

Wenn Sie sich nur auf das obige Array beziehen, sind Sie neugierig, wie Arrays in einer env-Datei gespeichert werden

Kurze Antwort: Das geht nicht.

Lange Antwort: .env-Variablen sind Strings So etwas wie 

BOOLEAN = true

wird als behandelt 

BOOLEAN = "true"

und so wird es

FESTIVALS = ['bonnaroo', 'lollapalooza', 'coachella'] 

behandelt werden als 

FESTIVALS = "['bonnaroo', 'lollapalooza', 'coachella']"

Lösung:

Sie können das Array als getrennte Zeichenfolge in .env speichern

FESTIVALS = "bonnaroo, lollapalooza, coachella"

In Ihrer js-Datei können Sie es mit in ein Array konvertieren

var festivals = process.env.FESTIVALS.split(",");
0
Abhishek