Express vs. Koa: JavaScript-Webframeworks im Vergleich

Werkzeuge  –  0 Kommentare

Das Webanwendungs-Framework Express zählt zu den am weitesten verbreiteten Modulen für Node.js und steht seit April in Version 4 bereit. Mit Koa gibt es eine interessante Alternative, hinter der teilweise die gleichen Entwickler stecken.

Express nahm in der bisherigen Form das Modul Connect zur Grundlage, das eine Middleware-Schicht für mit Node.js arbeitende Webanwendungen implementiert. Da Connect bereits eine Reihe von vorgefertigten Middleware-Modulen enthält, ließen sich diese serienmäßig auch in Express verwenden.

Das hat sich mit der Einführung von Express 4 geändert: Seitdem basiert es nicht länger auf Connect und verfolgt einen weitaus modulareren Ansatz. Das hat den Vorteil, dass Express kompakter ist und eine Anwendung nur noch jene Module kennt, die tatsächlich benötigt werden. Außerdem lässt sich der Entwicklungszyklus der Module so von dem von Express entkoppeln. Der Nachteil ist, dass zumindest der initiale Aufwand zum Einrichten einer Anwendung höher ist.

Als einziges in Express integriertes Modul ist serve-static verblieben, das statische Dateien aus einem Verzeichnis ausliefert. Es lässt sich auf Wunsch auch in eigenständiger Form nutzen. Die Dokumentation von Connect enthält eine Liste, die alle bisher integrierten Middleware-Module und deren zukünftigen Ersatz gegenüberstellt, sodass sich Projekte mit überschaubarem Aufwand auf die neue Version portieren lassen.

Der stärker modulare Ansatz betrifft jedoch nicht nur die Middleware-Module: Auch die Möglichkeit, Express global zu installieren, ist entfallen. Wer sich wie bisher das Grundgerüst neuer Anwendungen vom Framework erzeugen lassen will, muss dazu nun das Modul express-generator global installieren:

$ npm install -g express-generator

Danach steht das Kommando express systemweit zur Verfügung und lässt sich auf die gleiche Art wie bisher verwenden:

$ express --help

Middleware und Konfiguration

Neben den Änderungen an der grundlegenden Struktur von Express hat sich auch die Arbeit mit dem Framework verändert. Das ist vor allem durch entfallene Funktionen und Objekte bedingt.

Bereits seit längerem enthält die Dokumentation von Express 3.x den Hinweis, dass die Funktion app.configure() nur noch aus Gründen der Abwärtskompatibilität enthalten sei und nicht mehr verwendet werden solle. Als Ersatz wird dort der Einsatz einer if-Abfrage vorgeschlagen, so dass aus

app.configure(function () {
// For all environments
// ...
});

app.configure('development', function () {
// For development environment
// ...
});

app.configure('production', function () {
// For production environment
// ...
});

der zwar equivalente, aber kürzere Code

// For all environments
// ...

if (app.get('env') === 'development') {
// For development environment
// ...
}

if (app.get('env') === 'production') {
// For production environment
// ...
}

wird. Der Wert app.get('env') gibt dabei den Inhalt der Umgebungsvariablen NODE_ENV zurück oder, falls sie nicht definiert ist, die Zeichenkette "development". Express 4 unterstützt die Funktion app.configure() nun gar nicht mehr, sodass nur der Weg über die if-Abfragen verbleibt.