Skip to content

Instantly share code, notes, and snippets.

@sapegin
Created January 25, 2012 09:05
Show Gist options
  • Save sapegin/1675531 to your computer and use it in GitHub Desktop.
Save sapegin/1675531 to your computer and use it in GitHub Desktop.
Simple Node.js static HTTP server
function serve(lang, port) {
if (!lang && o.LANGS.length) lang = o.LANGS[0];
if (!port) port = 8000;
var mimeTypes = {
'default': 'text/plain',
'.html': 'text/html',
'.jpg': 'image/jpeg',
'.png': 'image/png',
'.js': 'text/javascript',
'.css': 'text/css'
};
var server = http.createServer(function(req, res) {
var uri = url.parse(req.url).pathname,
filename;
if (lang && uri.indexOf('.') === -1) { // Page
filename = path.join(o.PUBLISH_DIR, lang, (uri === '/' ? '/index' : uri) + '.html');
}
else { // File
filename = path.join(o.PUBLISH_DIR, uri);
}
path.exists(filename, function(exists) {
if (!exists) {
console.log(colors.red('404: ' + uri));
res.writeHead(404);
res.end('404: Not found.');
return;
}
console.log('200: ' + uri);
var mimeType = mimeTypes[path.extname(filename)] || mimeTypes['default'];
res.writeHead(200, {'Content-Type': mimeType});
var fileStream = fs.createReadStream(filename);
fileStream.pipe(res);
});
});
server.on('error', function (e) {
if (e.code === 'EADDRINUSE') {
serve(lang, port + 1);
}
else {
error('Error running server.\n' + e.code);
}
});
server.on('listening', function () {
console.log('Sweet is waiting for you at http://127.0.0.1:%s/', server.address().port);
});
server.listen(port);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment