Was ist die einfachste Methode, um mitzuteilen, in welcher Umgebung ich mich befinde? Z.B. Ich möchte Folgendes tun, um eine Verbindung zu Redis herzustellen, je nachdem, in welcher Umgebung ich mich befinde. Kann dies über die Befehlszeile erfolgen?
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
var r = require("redis").createClient(6379,'127.0.0.1');
});
app.configure('production', function(){
app.use(express.errorHandler());
r = redis.createClient(6379,'46.137.195.230', { detect_buffers: true });
});
Ihr Ansatz ist in Ordnung, aber Sie können etwas allgemeineres festlegen, z. B. das Speichern der Konfigurationsdaten für Redis in einer Datei oder das Übergeben der Argumente für Host und Port:
node app.js REDIS_Host REDIS_PORT
Dann können Sie sie in Ihrer App mit process.argv abrufen:
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
var r = require("redis").createClient(process.argv[2], process.argv[3]);
});
app.configure('production', function(){
app.use(express.errorHandler());
var r = require("redis").createClient(process.argv[2], process.argv[3], { detect_buffers: true });
});
Aktualisieren:
Express erkennt anhand der Variablen NODE_ENV (process.env.NODE_ENV), in welcher Umgebung Sie sich befinden: https://github.com/visionmedia/express/blob/master/lib/application.js# L55
Sie können diese Variable beim Starten der App wie folgt festlegen: NODE_ENV=production node app.js
(empfohlen), setze process.env.NODE_ENV manuell in deiner Node-App vor dem Express-Code oder setze diese env var in ~/.profile, wie Ricardo sagte.
So erweitern Sie die Idee, eine config.json-Datei zu verwenden:
// config.json
{
"development": {
"redisPort": 6379,
"redisHost": "127.0.0.1",
"errorHandlerOptions": {"dumpExceptions": true, "showStack": true}
},
"production": {
"redisPort": 6379,
"redisHost": "46.137.195.230",
"errorHandlerOptions": {"dumpExceptions": false, "showStack": false}
}
}
Laden Sie die Konfigurationsdatei und wechseln Sie basierend auf env.
// app.js
var config = require('./config.json')[app.get('env')];
app.use(express.errorHandler(config.errorHandlerOptions));
var r = require("redis").createClient(config.redisPort,config.redisHost);
Stellen Sie sicher, dass NODE_ENV auf jedem Server festgelegt ist (siehe andere Antworten, eine Möglichkeit: NODE_ENV=production node app.js
), und auf diese Weise weist die Konfigurationsvariable die Einstellungen auf, die dem Server entsprechen, auf dem sie ausgeführt wird.
Setzen Sie einfach die Umgebungsvariable NODE_ENV
Auf production
oder development
, wie in den Expressdokumenten beschrieben: http://expressjs.com/guide.html#configuration)
Ich lasse einfach NODE_ENV=development
Im ~/.profile
Der Dev-Maschine (.bashrc oder bash_profile unter Linux) und mache dasselbe für production
.
Ich habe etwas noch umfassenderes getan, indem ich die Quellen für solche Parameter bestellt habe:
var env = process.argv[2] || process.env.NODE_ENV || 'development'
var mongourl = process.argv[3] || process.env.NODE_DB || 'mongodb://localhost/default'
var port = process.env.PORT || 9001
Auf diese Weise können Sie Befehlszeilenargumente, Env-Einstellungen und Standardwerte verwenden.
Verwenden Sie das Konfigurationsmodul, mit dem Sie mehrere Konfigurationsdateien erstellen können https://www.npmjs.com/package/config
ZB default.json, production.json
Und starten Sie Ihren Server mit
export set NODE_ENV = Produktion & npm Start