[ Impressum ]

SimpleCGI

www.Rozek.de > Node.js > SimpleCGI
SimpleCGI ist eine einfache Express.js [1] "Middleware" für die Anbindung eines CGI-Prozessors an einen mit Node.js [2] erstellten HTTP-Server. Sie wurde ursprünglich für das "LiveCode Server"[3]-Paket entwickelt, kann aber auch mit anderen CGI/1.1-kompatiblen Programmen zusammen verwendet werden.

Diese Seite beschreibt Installation und Verwendung des SimpleCGI-Modules.

Übersicht

  • Download und Installation von SimpleCGI
  • Verwendung von SimpleCGI
  • automatisierte Tests

Download und Installation von SimpleCGI

Die Installation von SimpleCGI ist denkbar einfach:
  1. sofern noch nicht geschehen, installieren Sie Node.js auf Ihrem Rechner;
     
  2. wechseln Sie in das (ggfs. frisch angelegte) Verzeichnis, in welchem Sie Ihren Express.js-Server einrichten möchten;
     
  3. installieren Sie SimpleCGI
     
    npm install simplecgi
Im Anschluss daran ist SimpleCGI betriebsbereit.

Verwendung von SimpleCGI

SimpleCGI ist eine Express.js "Middleware" und wird wie eine solche eingesetzt. Zu Beginn sollten Sie SimpleCGI einmalig anschließen:

var SimpleCGI = require('simplecgi');

Anschließend können Sie eingehende HTTP-Requests an SimpleCGI routen:

app.all(RoutingRule, SimpleCGI(CGIProcessor, CGIBaseFolder, RoutingRule));

Die darin genannten Variablen haben folgende Bedeutung:
  • RoutingRule
    enthält die Regel, anhand der Express.js die URL eines eingehenden HTTP-Request als CGI-Anforderung erkennt und an SimpleCGI weiterleitet. SimpleCGI benötigt diese Regel selber, um evtl. zusätzliche Angaben hinter dem Verweis auf das aufzurufende CGI-Skript zu erkennen;
  • CGIProcessor
    enthält den Pfad zu demjenigen Programm, welches die CGI-Requests verarbeiten soll;
  • CGIBaseFolder
    enthält das Verzeichnis, von dem ausgehend das auszuführende CGI-Skript gefunden werden kann.
Ein konkretes Beispiel soll dies verdeutlichen:

var express = require('express'); var SimpleCGI = require('simplecgi');

var WebServer = express();
WebServer.all(/^.+[.]sh/, SimpleCGI(
__dirname + '/CGIProcessor.sh', __dirname + '/www', /^.*[.]sh/
));
WebServer.listen(8100);

Dieses kleine Skript startet auf Port 8100 einen HTTP-Server mit folgenden Eigenschaften:
  • Anfragen mit einem ".sh" in der URL (wie z.B. "http://127.0.0.1:8100/example/test.sh") werden an SimpleCGI weitergeleitet - alle anderen Anfragen werden ignoriert;
     
  • die Anfragen werden von einem Shell-Skript verarbeitet (dies ist zwar ungewöhnlich, aber - vor allem zu Testzwecken - durchaus möglich);
     
  • dieses Shell-Skript (namens "CGIProcessor.sh") liegt im selben Verzeichnis wie der Express.js-Server auch;
     
  • das vom CGIProcessor auszuführende CGI-Skript wird im Unterordner "/www" des Verzeichnisses mit dem Express.js-Server gesucht (im konkreten Fall würde nach "./www/example/test.sh" gesucht).
     
    Es ist durchaus normal, dass CGI-Skripte in denselben Verzeichnissen liegen wie andere (statische) Dateien auch - es ist allerdings nicht zwingend erforderlich.
SimpleCGI definiert alle für CGI/1.1 üblichen Umgebungsvariablen:

$AUTH_TYPE, $CONTENT_LENGTH, $CONTENT_TYPE, $DOCUMENT_ROOT, $GATEWAY_INTERFACE, $HTTP_ACCEPT, $HTTP_ACCEPT_CHARSET, $HTTP_ACCEPT_LANGUAGE, $HTTP_CONNECTION, $HTTP_COOKIE, $HTTP_HOST, $HTTP_REFERER, $HTTP_USER_AGENT, $PATH_INFO, $PATH_TRANSLATED, $QUERY_STRING, $REMOTE_ADDR, $REMOTE_HOST, $REMOTE_IDENT, $REMOTE_PORT, $REMOTE_USER, $REQUEST_METHOD, $REQUEST_URI, $SCRIPT_FILENAME, $SCRIPT_NAME, $SERVER_ADDR, $SERVER_ADMIN, SERVER_NAME, $SERVER_PORT, $SERVER_PROTOCOL, $SERVER_SIGNATURE, $SERVER_SOFTWARE

Ohne Ausgaben vom CGI-Prozessor antwortet SimpleCGI mit dem StatusCode 204 (no Content).

Beginnen die Ausgaben des CGI-Prozessors nicht mit einem erkennbaren HTTP-Header, setzt SimpleCGI den Content-Type auf Application/Octet-Stream. Aber auch sonst nimmt SimpleCGI keinerlei Zeichen- oder Zeilenenden-Konvertierungen vor, sondern sendet alle Ausgaben unverändert an den Client zurück - dadurch eignet sich SimpleCGI auch für binäre Ausgaben.

Fehlermeldungen des CGI-Prozessors und ExitCodes > 0 werden nur auf der (Server-)Konsole protokolliert, haben aber keine Auswirkungen auf StatusCode oder Inhalt der HTTP-Antwort. Es ist Aufgabe des CGI-Prozessors selbst, evtl. Fehler in geeigneter Weise an den Client zurückzumelden.

Automatisierte Tests

SimpleCGI kann automatisiert getestet werden. Die Tests sind Bestandteil des SimpleCGI-Paketes und werden mit diesem zusammen installiert. Zusätzlich ist allerdings noch das Mocha[4]-Paket erforderlich:

npm install -g mocha

Eine "globale" Installation von Mocha (durch Angabe von -g) ist zwar nicht zwingend erforderlich, vereinfacht aber den Aufruf von Tests, da der Pfad zu Mocha selbst nicht mehr angegeben werden muss.

Wie unter Mocha üblich, werden die Testskripte nicht direkt, sondern mithilfe von Mocha selbst gestartet:

mocha -u tdd <SimpleCGI-Installation-Folder>/simplecgi-tests.js

Darin steht "<SimpleCGI-Installation-Folder>" für das Installationsverzeichnis von SimpleCGI (innerhalb eines node_modules-Ordners). Wenn alles ordnungsgemäß funktioniert, sollten Sie folgende Ausgabe erhalten:

â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â?â? â?â?â?â?â?â?â?â?â?â?

49 passing (356ms)

                       
Viel Spaß mit SimpleCGI! Creative Commons Lizenzvertrag

Literaturhinweise

[1]
Tj Holowaychuk
Express - node.js web application framework
Express ist ein schlankes Web Application Framework für Node.js. Dank seines "Baukastensystems" ermöglicht Express eine zügige Entwicklung von HTTP-Servern auf Basis von Node.js.
[2]
Joyent Inc.
node.js
Node.js ist zunächst einmal eine Plattform für in JavaScript geschriebene und dennoch äußerst leistungsfähige Netzwerk-Anwendungen. In Verbindung mit weiteren Technologien (wie z.B. Node-WebKit) kann Node.js aber auch für mehr als nur HTTP-Server eingesetzt werden.
[3]
(RunRev Ltd.)
LiveCode | LiveCode Server Guide
Der LiveCode Server ist ein Interpreter für LiveCode-Skripte, der von der Kommandozeile aus gestartet wird (ohne grafische Benutzeroberfläche auskommt) und vor allem als CGI-Prozessor gedacht ist (auf diese Weise können Web-Seiten mit LiveCode bearbeitet werden - man muß also nicht mehr unbedingt PHP lernen).
[4]
TJ Holowaychuk
Mocha - the fun, simple, flexible JavaScript test framework
Mocha ist ein einfach zu handhabendes Framework für synchrone und asynchrone Tests unter Node.js oder in einem Browser.