Skip to content

Instantly share code, notes, and snippets.

@schell
Created March 24, 2010 20:00
Show Gist options
  • Save schell/342713 to your computer and use it in GitHub Desktop.
Save schell/342713 to your computer and use it in GitHub Desktop.
/**
* Creates and populates a server with listeners.
*
* @param request http.ServerRequest
* @param response http.ServerResponse
* @author Schell Scivally
* @since Sat Mar 6 18:20:46 PST 2010
*/
var server = http.createServer(function (request, response) {
// put the response in an envelope
var handler = envelope.envelop(request, response);
// fetch a file for get a router
function fetch () {
// try to get the static file, if not, give to the router
fileFetcher.fetch(handler.file, function (fetchErr, data, stat) {
if (fetchErr) { // file does not exist, or is not readable
// new router each request
var router = require('./server/router');
router.routeRequest(handler, function (routeErr) {
if (routeErr) {
sys.puts('! ' + routeErr.code + ' ' + routeErr.message);
handler.setCode(routeErr.code);
handler.sendAndClose();
} else {
// accumulation of the body should have happend
// in the router
handler.sendAndClose();
}
}); // end route request
} else {
handler.setCode(200);
handler.setHeader('Content-Length', stat.size);
handler.setHeader('Content-Type', mime.getMimeFromFilename(handler.file));
sys.puts(' got mime:'+mime.getMimeFromFilename(handler.file));
handler.setBody(data);
handler.sendAndClose(function () {
sys.puts(' wrote file');
sys.puts(sys.inspect(response));
response.close();
});
} // end on fetch error
}); // end fetch
}
// wait for all data from the request to be read, handler needs time to get post vars
request.addListener('end', function (){
sys.puts(' server.js ' + response.socket.remoteAddress + ':' + response.socket.remotePort + ' ' + request.url);
fetch();
}); // end request 'end'
}); // end createServer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment