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);

Leave a Reply

Your email address will not be published. Required fields are marked *