Viele Webanwendungen werden heute fast ausschließlich in Javascript geschrieben. Frameworks existieren wie Sand am Meer und bieten mannigfaltige Möglichkeiten. Bei den richtig großen muss man gar kein HTML mehr anfassen, sie nehmen einem alles an Arbeit ab – und das ist gut so. Was aber passiert denn mit der Middleware? Also der Teil der Applikation wo die Datenbank befragt wird und Sessions gesteuert werden?
Normalerweise verwendet man hier eine andere Sprache, z.B. PHP, Python oder Perl. Doch hier sind Probleme und Schwierigkeiten bereits vorprogrammiert. Die verwendeten Frameworks sind oft zu groß und die meiste Zeit geht dafür verloren, Datenstrukturen von Links nach Rechts zu konvertieren. Vom Kontextwechsel ganz zu schweigen: Variablen mit oder ohne Dollarzeichen, Strichpunkte Ja/Nein, unterschiedliche Objektorientierung usw – gräuslich …
Seit einiger Zeit begibt sich Javascript auf der Konsole wie Nodejs/V8 oder Rhino in die stabilen Zweige der Distributionen und es schießen immer mehr Frameworks aus dem Boden welche die großen Klassiker im Webumfeld ersetzen können (nicht müssen ^^). Warum also nicht mal eine Sprache für alle Teile der Applikation zu verwenden?
Einer dieser Leichtfüßer für Nodejs ist Connect von Senchalabs welches unter der MIT Lizenz veröffentlicht wurde. Ein kleiner Exkurs:

var connect = require('connect');
var http = require('http');
var app = connect();
app.use(connect.logger());
app.use(connect.cookieParser());
app.use("/data", function(req, res) {
    res.setHeader("Content-Type", "application/json");
    res.end(JSON.stringify({
        success: true,
        count: 2,
        data: [{
            firstname: "Eduart",
            surname: "Zimmermann"
        }, {
            firstname: "Heidrun",
            surname: "Bumbel"
        }]
    }));
});
http.createServer(app).listen(3000);

Das Plugin Prinzip von Connect ist sehr interessant und vereinfacht das Handling von gleichartigen Anfragen. Die Plugins (Middleware) sind in Reihe geschaltet und können so bereits viel Vorarbeit leisten bis die eigentlich konkrete Implementierung. So können z.B. JSON Requests, Cookies oder Authentifizierung bereits vorher abgearbeitet werden und stehen dann schon bereit.
Das alles setzt natürlich ein einigermaßen aktuelles System (was der Entwickler grundsätzlich besitzt) voraus auf dem Nodejs und sein Paket Manager npm als Distro Pakete verfügbar sind (z.B. Ubuntu). Aber selbst kompilieren von Hand ist ohne großen Aufwand möglich. Am besten gleich probieren und freuen …

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.