philishake
javascript enthusiast
Hallo liebe Community,
ich habe vor kurzem angefangen NodeJS zu lernen. Dazu habe ich einen eigenen kleinen Webserver geschrieben. Dieser funktioniert auch einwandfrei, ausser fuer CSS Dateien. Nach etlichem debugging und Suchen (stackoverflow, etc) konnte ich das Problem leider nicht loesen. Ich hab das ganze gleich als Node-Module gebaut. Hier mal mein Code:
Das ganze kann man auch auf Github finden: https://github.com/Luketep/node_rts/blob/master/HTTPServer.js
Hier koennt ihr auch das ganze Projekt sehen, falls ihr es mal lokal probieren wollt. Lest dazu einfach die Readme.md
Es kommt auch vor das zwischendurch (nach mehrmaligen oder einfachen refresh) das CSS geladen wird, aber das ist sehr sporadisch.
Lieben Dank fuer's Lesen!
ich habe vor kurzem angefangen NodeJS zu lernen. Dazu habe ich einen eigenen kleinen Webserver geschrieben. Dieser funktioniert auch einwandfrei, ausser fuer CSS Dateien. Nach etlichem debugging und Suchen (stackoverflow, etc) konnte ich das Problem leider nicht loesen. Ich hab das ganze gleich als Node-Module gebaut. Hier mal mein Code:
Javascript:
var FileSystem, Http, UrlParser, ContentTypes, ContentDefault,
DefaultFile, Logger;
Logger = require('./Logger.js');
FileSystem = require('fs');
Http = require('http');
UrlParser = require('url');
ContentDefault = {
status: 200, header: "text/plain"
};
DefaultFile = "/public/index.html";
ContentTypes = {
".html": {status: 200, header: "text/html"},
".js": {status: 200, header: "application/javascript"},
".css": {status: 200, header: "text/css"},
".txt": {status: 200, header: "text/plain"},
".json": {status: 200, header: "application/json"},
".php": {status: 200, header: "application/php"},
".ico": {status: 200, header: "image/x-icon"}
};
exports.createHttpServerListener = function createHttpServerListener(port) {
var parsedUrl, requestUrl, directory, server;
server = Http.createServer(function requestListener(request, response) {
parsedUrl = UrlParser.parse(request.url);
requestUrl = parsedUrl.pathname.split('/');
directory = __dirname.replace(/\\/, "/");
// /module/controller/function/param1/val1/...
if (requestUrl.indexOf('.') === 0) {
// controller request
// deliver index.html with game data
// check for security
Logger.LOG('\nWARNING: Controller request which is not handled!');
}
if (parsedUrl.pathname === "/") {
// index.html
parsedUrl.pathname = DefaultFile;
}
FileSystem.readFile('.' + parsedUrl.pathname, function(error, content) {
var ext, extIndex, status, header;
if (error) {
response.writeHead(500);
Logger.LOG('ERROR: FILE READ ERROR 404/500', parsedUrl.pathname);
return response.end();
}
extIndex = parsedUrl.pathname.indexOf(".");
ext = parsedUrl.pathname.substring(extIndex);
if (ContentTypes[ext]) {
status = ContentTypes[ext].status;
header = ContentTypes[ext].header;
} else {
status = ContentDefault.status;
header = ContentDefault.header;
Logger.LOG('ERROR: File-Extension not found: ', ext);
}
Logger.LOG(header, status, parsedUrl.pathname);
response.setHeader('Content-Type', header);
response.writeHead(status, header);
return response.end(content);
});
});
server.listen(port);
return server;
};
Das ganze kann man auch auf Github finden: https://github.com/Luketep/node_rts/blob/master/HTTPServer.js
Hier koennt ihr auch das ganze Projekt sehen, falls ihr es mal lokal probieren wollt. Lest dazu einfach die Readme.md
Es kommt auch vor das zwischendurch (nach mehrmaligen oder einfachen refresh) das CSS geladen wird, aber das ist sehr sporadisch.
Lieben Dank fuer's Lesen!