Statischer Webserver in node.js

Das ganze hier läuft getestet nur unter node 0.41

Mein erstes Ziel in node.js war es einen simplen Webserver zu bauen der vorhandene Files an den Browser ausliefert und auf nicht vorhandene Files mit einem 404 .. oder was auch immer antwortet.

Dazu empfiehlt es sich die API von Node mal durchzusehen .. da ich ja einige Funktionen brauche die Client JS nicht vorsieht. Ich muss im Filesystem schauen ob die Datei da ist oder nicht .. und ich muss sie ausliefern.

Das Herz dieses kleinen Servers ist folgender Abschnitt:

var server = http.createServer(function (req, res) {
  var uri = url.parse(req.url).pathname; 
  var filename = path.join(process.cwd(), uri);  
  path.exists(filename, function (exists) {	
    if(!exists) {  
	  res.writeHead(404, { "Content-Type": "text/plain"});
  	  res.end("Not Found");
    }
    fs.readFile(filename, function (err, data) {	
        if(err) {  
            res.writeHead(500, {"Content-Type": "text/plain"});  
            res.end(err + "\n");    
            return;  
        }
        res.writeHead(200); 
        res.write(data, "binary");
        res.end();
	});
  });
});
  • parsen der URL und abspeichern des Dateinamens (/beispiel.html)
  • process.cwd gibt das aktuelle directory zurück
  • und wir fügen den den Dateinamen an
  • dann schauen wir ob das File auch wirklich auf der Kiste liegt
  • wenn nicht dann Not Found 404
  • wenn ja lesen wir das File aus
  • sollte beim Auslesen noch was schief gehen (err) geben wir das aus
  • ansonsten liefern wir nen 200 an den Browser und geben das File aus

Hier der komplette Quelltext meines statischen Webservers in Node.js:

HOST = null; // localhost
PORT = 8000;
var sys = require("sys"),  
    http = require("http"),  
    url = require("url"),  
    path = require("path"),  
    fs = require("fs");
var server = http.createServer(function (req, res) {
  var uri = url.parse(req.url).pathname; 
  var filename = path.join(process.cwd(), uri);  
  path.exists(filename, function (exists) {	
    if(!exists) {  
	  res.writeHead(404, { "Content-Type": "text/plain"});
  	  res.end("Not Found");
    }
    fs.readFile(filename, function (err, data) {	
        if(err) {  
            res.writeHead(500, {"Content-Type": "text/plain"});  
            res.end(err + "\n");    
            return;  
        }
        res.writeHead(200); 
        res.write(data, "binary");
        res.end();
	});
  });
});
listen = function (port, host) {
  server.listen(port, host);
  sys.puts("Server at http://" + (host || "127.0.0.1") + ":" + port.toString() + "/");
};
listen(Number(PORT), HOST);

Hallo Welt in node.js

Öffnet eine Textdatei und kopiert folgendes hinein ..

 http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hallo Welt'); 
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');

Das dann unter hallowelt.js abspeichern.
Nun in der Konsole einfach

node hallowelt.js

aufrufen.

Wenn ihr alles richtig gemacht habt gibt die Konsole: Server running at http://127.0.0.1:8124/ aus und ihr solltet euer HalloWelt im Browser unter folgender URL erreichen: http://localhost:8000/

Er erscheint eine weiße Seite in der “Hallo Welt” steht.

Den Server stoppt ihr übrigens mit CONTROL-C wieder.

Node.js unter MacOS X

1. Xcode ist notwendig .. also die Entwicklungsumgebung für OSX .. dazu müsst ihr euch bei Apple registrieren (kostenlos) oder ihr schaut auf eurer OSX DVD ob ihr XCode findet.

2. GIT installieren -> gibts hier git ist ne Versionsverwaltung ähnlich wie SVN .. ihr brauchts zum auschecken der diversen Module

3. Ein Terminal Fenster öffnen und dann per git clone das Repo auschecken .. vorher natürlich ein Arbeitsverzeichnis erstellen und auf der Konsole dort hinein wechseln. Der ganze Befehl im Terminal ->

git clone https://github.com/joyent/node.git

4. Wechsel in das node Verzeichnis und dann folgendes .. nacheinander:

 ./configure
 make 
 make install

Damit baut und installiert ihr Node auf eurem Mac. Sollte das Probleme machen oder ein Fehler im Terminal erscheinen das make mit sudo aufrufen .. also sudo make install. Danach müsst ihr euer OSX Passwort eingeben.

Mit folgendem schaut ihr dann welche Version ihr euch installiert habt:

node --version

Node.js

node.js ist serverseitiges JavaScript

Quellen für node.js für mich und andere:

Alle Node Module -> Node.js Module
node.js -> nodejs.org
Node Buch -> Mastering Node
Der Start mit Node -> in 3 Minuten
Node by Example -> 5 Minuten?
Node unter MacOS X -> hier
express.js -> Framework für node
fab.js -> weiteres Framework
Node Package Manager -> npm
Test Framework für Node -> Vows
UNIT Tests in Node -> gibts auch
DOM in JS -> JSDom