Node.js ist ein serverseitiges Framework zum Erstellen von Server- und Konsolenanwendungen mit JavaScript. Es setzt mit der JavaScript-Engine V8 von Google eine sehr schnelle JavaScript-Implementierung ein.

Cylon.js - Javascript für das internet der Dinge

Bei Cylon.js handelt es sich um ein Node-Modul, es ermöglicht den einfachen Zugriff auf viele unterschiedliche Hardwareplatformen (momentan 43). Dabei wird der eigentliche JavaScript-Code entweder auf einem PC ausgeführt wodurch z.B einen Arduino nicht mehr autark ist, oder kann bei leistungsfähiger Hardware wie z.B einem Rasspery Pi direkt auf dem System ausgeführt werden. Bei der Verwendung von Hardware die nicht in der Lage ist den Node.js Code selbstständig auszuführen werden die verarbeiteten Befehle über unterschiedliche Protokolle an das Board geschickt und dort dann ausgeführt. Mit dem Arduino erfolgt die Datenübertragung per Firmata Protokoll, dafür muss ein spezielles Image auf den Arduino geflasht werden. Neben Firmata werden je nach Platform auch noch andere Protokolle unterstützt.

Eine Tutorial über die Verwendung von Cylon.js findet ihr z.B. hier.

Mit Johnny-Five existiert noch eine zweites Node-Modul welches einen ähnlichen Funktionsumfang bietet.

Apache Proxy für Node.js einrichten

Will man auf einem Rootserver parallel einen Apache und einen Node.js Server betreiben hat man das Problem das beide nicht einfach auf dem selben Port laufen können. Zwar ist es theoretisch möglich Node.js oder Apache auf unterschiedlichen Ports laufen zu lassen. Allerdings ist das bei Webserver unüblich und kann zu Problemen führen wenn bei einigen Benutzern nur der Port 80 in der Firewall geöffnet ist.  Auch ist es damit nicht möglich nur eine bestimmte Subdomain unter Node.js zu betreiben.

In der folgenden Anleitung wird beschrieben wie man eine Subdomain unter Apache an einen Node.js Server weiterleitet, alles wurde unter Ubuntu erfolgreich getestet. Die hier vorgestellte Lösung ist performance-technisch nicht optimal aber einfach umzusetzen.

Hier der verwendete minimale Node.js Server:

var http = require("http");
var s = http.createServer(function(req,res){
  res.writeHead(200, {'content-type': 'text/plain'});
  res.end("Node working on 8080"); 
});
s.listen(8080); 
console.log("Server running...") 

Für den Apache müssen über zwei zusätzliche Module installiert werden: sudo apt-get install libapache2-mod-proxy-html Danach müssen die beiden Module über  sudo a2enmod proxy_http
sudo a2enmod proxy
aktiviert werden. Die Virtualhost-Datei muss wie folgt aufgebaut sein:

<VirtualHost *:80>
   ServerName tour.ragersweb.de
   ServerAdmin webmaster@ragersweb.de 

   ProxyRequests On
   <Proxy *>
    Order deny,allow
    Allow from localhost
   </Proxy>
   ProxyPass / http://localhost:8080
   ProxyPassReverse / http://localhost:8080 
</VirtualHost>

In diesem Beispiel werden alle Anfragen an die Subdomain bps.ragersweb.de an den unter Port 8080 laufenden Node.js Server weiterleitet.

Websites mit Node.js

Das Entwickeln von Webanwendungen mit Node.js unterscheidet sich Grundlegend von der Herangehensweise in PHP. Wo PHP eine sehr umfangreiche Standartbibliothek bietet ist die von Node.js auf das wichtigste reduziert.

Um Node.js zu erweitern stehen zahlreiche Module zur Verfügung. Module können über die Paketverwaltung NPM installiert werden. Inzwischen ist NPM standardmäßig in der Node.js Installation enthalten.

Nachfolgend einige wichtige Module die für Standardwebanwendungen hilfreich sind:

  • Express
    Webframework welches die Arbeit mit Node.js extrem erleichtert
  • Swig
    Templateengine für express, benötigt Consolidate um zu funktionieren
  • Xml2js
    Einfacher Wrapper wandelt XML in JSON um und ermöglicht so direkten Zugriff. Funktioniert unter Linux und Windows
  • Eyes
    Bringt Farbe in die Console
  • MongoJs
    Datenbanktreiber für MongoDb
  • Prompt
    Nimmt Eingaben von der Commandline entgegen
  • Cheerio
    jQuery Implementierung für Node.js ermöglicht den Zugriff auf das DOM über die bekannten jQuery Selektoren
  • Request
    einfacheres Screen-Scraping für Node.js, funktioniert auch unter Windows