JSON-Konfiguration mit Node.js

the next big thing  –  1 Kommentare

Fast jede Webanwendung, die auf Node.js basiert, enthält ein Konstrukt, um den für den Webserver zu verwendenden Port entweder aus der Umgebungsvariable PORT auszulesen oder, falls diese Variable nicht gesetzt wurde, auf einen Standardwert zurückzugreifen.

Der Bootstrapper des weit verbreiteten Webframeworks Express, das von TJ Holowaychuk entwickelt wird, erzeugt dieses Konstrukt automatisch für jede Anwendung, indem innerhalb ihres Konfigurationsabschnitts eine entsprechende, anwendungsweit gültige Eigenschaft definiert wird:

app.configure(function () {
app.set('port', process.env.PORT || 3000);
// ...
});

Auf diese Eigenschaft greift Express dann an entsprechender Stelle zurück, beispielsweise beim Start des Webservers und der Ausgabe der dazugehörigen Erfolgsmeldung:

http.createServer(app).listen(app.get('port'), function () {
console.log('Express server listening on port ' + app.get('port'));
});

Wenn eine Applikation wächst, kommen im Lauf der Zeit weitere Standardwerte für bestimmte Einstellungen hinzu. Denkbar sind hier unter anderem vordefinierte Verbindungszeichenfolgen zu Datenbanken und von der Anwendung zu verwendende Verzeichnisse.

Werden diese Konfigurationseinstellungen übersichtlich an einem zentralen Ort verwaltet, verbessert das die Wartbarkeit einer Anwendung. In Node.js bietet sich für diesen Zweck die Verwendung einer Datei im JSON-Format an, da dieses verschiedene Vorteile vereint:

  • Verbreitung: JSON ist nahezu jedem Webentwickler bekannt und wird von jeder modernen JavaScript-Laufzeitumgebung nativ verarbeitet.
  • Lesbarkeit: JSON ist nicht nur weitaus kompakter als XML, sondern auch wesentlich angenehmer zu lesen. Das ist vor allem für andere, technisch eventuell weniger versierte Zielgruppen als Entwickler hilfreich.
  • Validierbarkeit: JSON kann auf einfache Art gegen ein vordefiniertes Schema validiert werden, beispielsweise mit Amanda.
  • Webbrowser: JSON kann außerdem auch in jedem modernen Webbrowser mit den dort verfügbaren Funktionen JSON.parse und JSON.stringify verarbeitet werden, sodass sich mit geringem Aufwand Webwerkzeuge zur Verarbeitung von Konfigurationsdateien entwickeln lassen.

Für Node.js-Entwickler ist JSON als Konfigurationsformat unter anderem auch deshalb interessant, weil die in Node.js enthaltene require-Funktion außer JavaScript- auch JSON-Dateien laden kann.

Um also beispielsweise die in der Datei config.json enthaltene Konfiguration in einer Node.js-Anwendung, verwenden zu können, genügt der folgende Aufruf:

var configuration = require('./config.json');

Danach lässt sich auf das in der Konfigurationsdatei serialisierte JSON-Objekt mithilfe der Variablen configuration zugreifen. Werden in der Datei config.json also die Ports als

{
"ports": {
"http": 80,
"https": 443
}
}

definiert, stehen diese nach dem Laden der Datei unter configuration.ports.http beziehungsweise configuration.ports.https zur Verfügung.

Selbstverständlich gibt es für Node.js auch spezialisierte Module wie nconf, die unter anderem verschiedene Konfigurationsquellen verarbeiten können. Häufig genügt der hier beschriebene Ansatz jedoch vollkommen, sodass auf ein komplexes, zusätzliches Modul in der Regel guten Gewissens verzichtet werden kann.

tl;dr: Die require-Funktion von Node.js kann JSON-Dateien nativ verarbeiten. Das ermöglicht die Verwaltung aller Konfigurationseinstellungen an einem gemeinsamen Ort.