Ich benutze node.js + express.js + everyauth.js. Ich habe meine gesamte Logik in eine Moduldatei verschoben
var login = require('./lib/everyauthLogin');
Darin lade ich meine oAuth-Konfigurationsdatei mit den Schlüssel / Geheimnis-Kombinationen:
var conf = require('./conf');
.....
twitter: {
consumerKey: 'ABC',
consumerSecret: '123'
}
Diese Codes sind für verschiedene Umgebungen unterschiedlich - Entwicklung / Staging / Produktion, da sich die Rückrufe auf verschiedene URLs beziehen.
Qu. Wie stelle ich diese in der Umgebungskonfiguration so ein, dass sie durch alle Module filtern, oder kann ich den Pfad direkt in das Modul übergeben?
Set in env:
app.configure('development', function(){
app.set('configPath', './confLocal');
});
app.configure('production', function(){
app.set('configPath', './confProduction');
});
var conf = require(app.get('configPath'));
Pass in
app.configure('production', function(){
var login = require('./lib/everyauthLogin', {configPath: './confProduction'});
});
? hoffe das macht Sinn
Antworten:
Meine Lösung,
Laden Sie die App mit
Dann
config.js
als Funktion und nicht als Objekt einrichtenLaden Sie dann gemäß Jans-Lösung die Datei und erstellen Sie eine neue Instanz, die wir bei Bedarf als Wert übergeben können. In diesem Fall
process.env.NODE_ENV
ist sie global und wird daher nicht benötigt.Dann können wir genau wie zuvor auf die Eigenschaften des Konfigurationsobjekts zugreifen
quelle
new
notwendig?new
. Ich folge in derconfig.js
....Config = function(){...}; module.exports = Config()
Sie können auch eine JSON-Datei mit NODE_ENV als oberster Ebene haben. IMO, dies ist eine bessere Möglichkeit, Konfigurationseinstellungen auszudrücken (im Gegensatz zur Verwendung eines Skripts, das Einstellungen zurückgibt).
Beispiel für env.json:
quelle
Eine sehr nützliche Lösung ist die Verwendung des Konfigurationsmoduls .
Nach der Installation des Moduls:
Sie können eine Konfigurationsdatei default.json erstellen. (Sie können ein JSON- oder JS-Objekt mit der Erweiterung .json5 verwenden.)
Beispielsweise
Diese Standardkonfiguration kann durch eine Umgebungskonfigurationsdatei oder eine lokale Konfigurationsdatei für eine lokale Entwicklungsumgebung überschrieben werden:
Production.json könnte sein:
development.json könnte sein:
Auf Ihrem lokalen PC können Sie eine local.json haben , die die gesamte Umgebung überschreibt, oder Sie können eine bestimmte lokale Konfiguration als local-Production.json oder local-development.json haben .
Die vollständige Liste der Ladereihenfolge .
In Ihrer App
In Ihrer App müssen Sie nur die Konfiguration und das erforderliche Attribut benötigen.
Laden Sie die App
Laden Sie die App mit:
oder die richtige Umgebung mit forever oder pm2 einstellen
Für immer:
PM2 (über Shell):
PM2 (über .json):
process.json
Und dann
Diese Lösung ist sehr sauber und erleichtert das Einstellen verschiedener Konfigurationsdateien für die Produktions- / Staging- / Entwicklungsumgebung und auch für die lokale Einstellung.
quelle
In Kürze
Diese Art der Einrichtung ist einfach und elegant:
env.json
common.js
app.js.
So führen Sie den Produktionsmodus aus:
$ NODE_ENV=production node app.js
Im Detail
Diese Lösung ist aus: http://himanshu.gilani.info/blog/2012/09/26/bootstraping-a-node-dot-js-app-for-dev-slash-prod-environment/ , check it out für Mehr Details.
quelle
Wir tun dies, indem wir beim Starten der App mit der Umgebung ein Argument übergeben. Zum Beispiel:
In app.js laden wir dann
dev.js
als Konfigurationsdatei. Sie können diese Optionen mit optparse-js analysieren .Jetzt haben Sie einige Kernmodule, die von dieser Konfigurationsdatei abhängen. Wenn Sie sie als solche schreiben:
Und Sie können es dann
app.js
wie folgt nennen :quelle
app.configure('development
Code behalten , aber ich werde schauen, ob ich diese Lösung damit verwenden kannEine elegante Möglichkeit besteht darin,
.env
Dateien zu verwenden, um Produktionseinstellungen lokal zu überschreiben. Keine Notwendigkeit für Befehlszeilenschalter. Alle diese Kommas und Klammern in einerconfig.json
Datei sind nicht erforderlich . Siehe meine Antwort hierBeispiel: Auf meinem Computer
.env
lautet die Datei wie folgt:Mein lokaler
.env
überschreibt alle Umgebungsvariablen. Auf den Staging- oder Produktionsservern (möglicherweise auf heroku.com) sind die Umgebungsvariablen jedoch auf BühneNODE_ENV=stage
oder Produktion voreingestelltNODE_ENV=prod
.quelle
Legen Sie die Umgebungsvariable im Bereitstellungsserver fest (Beispiel: wie NODE_ENV = Produktion). Sie können über process.env.NODE_ENV auf Ihre Umgebungsvariable zugreifen. Suchen Sie die folgende Konfigurationsdatei für die globalen Einstellungen
base enthält eine gemeinsame Konfiguration für alle Umgebungen.
dann in andere Module wie importieren
Viel Spaß beim Codieren ...
quelle
Wie wäre es mit dem nodejs-config- Modul auf eine viel elegantere Art und Weise ?
Dieses Modul kann die Konfigurationsumgebung basierend auf dem Namen Ihres Computers festlegen. Wenn Sie danach eine Konfiguration anfordern, erhalten Sie einen umgebungsspezifischen Wert.
Angenommen, Sie haben zwei Entwicklungsmaschinen mit den Namen pc1 und pc2 und eine Produktionsmaschine mit dem Namen pc3. Wann immer Sie Konfigurationswerte in Ihrem Code in PC1 oder PC2 anfordern, müssen Sie die Konfiguration der Entwicklungsumgebung und in PC3 die Konfiguration der Produktionsumgebung erhalten. Dies kann folgendermaßen erreicht werden:
Erstellen Sie nun eine neue Konfigurationsinstanz mit der folgenden Syntax.
Jetzt können Sie jeden Konfigurationswert abrufen, ohne sich um die folgende Umgebung kümmern zu müssen:
quelle
Diese Antwort ist nichts Neues. Es ist ähnlich wie das, was @andy_t erwähnt hat. Aber ich benutze das folgende Muster aus zwei Gründen.
Saubere Implementierung ohne externe npm-Abhängigkeiten
Führen Sie die Standardkonfigurationseinstellungen mit den umgebungsbasierten Einstellungen zusammen.
Javascript-Implementierung
Normalerweise verwende ich Typoskript in meinem Knotenprojekt. Unten ist meine tatsächliche Implementierung kopiert.
Typoskript-Implementierung
quelle